Django Импорт ошибок в производственной среде - PullRequest
0 голосов
/ 18 февраля 2011

У меня проблема с запуском проекта django на рабочем сервере с Apache и mod_wsgi.Эта ошибка произошла, когда я запускаю apache и захожу на сайт впервые или захожу с другого сайта:

ImportError at /
Значение исключения: невозможно импортировать имя MyName
Местоположение исключения / var /www / projectname / appname / somemodule.py

Когда я перезагружаю страницу, ошибка исчезает и сайт работает нормально.Другой момент заключается в том, что эта ошибка произошла выборочно, а иногда и не появляется.

В проекте я использую импорт без префикса имени проекта (я имею в виду «из account.models import Account» вместо «from projectname.accounts.models import»Учетная запись ').

На сервере разработки (manage.py runserver) все работает нормально, без проблем.

Я использовал много вариантов конфигураций сценариев apache и wsgi, но проблема не решена.

Вот мое текущее имя проекта.wsgi:

#!/usr/bin/env python
import os, sys, re

sys.path.append('/var/www/projectname')
sys.path.append('/var/www')

os.environ['PYTHON_EGG_CACHE'] = '/var/www/projectname/.python-egg'
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Вот некоторые части из конфигурации Apache:

<VirtualHost ip:80>
    ServerAdmin admin@server.com
    DocumentRoot /var/www
    ServerName www.projectname.com
    WSGIScriptAlias / "/var/www/projectname/projectname.wsgi"

    WSGIDaemonProcess projectname threads=5 maximum-requests=5000

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ....

Также я использую отдельный виртуальный хост для SSL.
Надеюсь, кто-нибудь мне поможет.
Спасибо!

Ответы [ 3 ]

0 голосов
/ 20 февраля 2011

На сервере разработки django среда сервера настраивается в соответствии с текущим проектом, над которым вы работаете. Вот почему происходят ошибки импорта при переходе на Apache.

При использовании импорта используйте "из имя_проекта.appname.models import MyModel". Будьте как можно лучше.

Используйте sys.path.append ('location / to / your_project_foler /') в вашем случае "/ var / www"

Просто предложение:

Также попробуйте настроить django по другому адресу, нежели root. У меня также была похожая проблема при попытке запустить django в корне сайта, то есть: WSGIScriptAlias ​​/ "/var/www/projectname/projectname.wsgi"

0 голосов
/ 05 декабря 2013

Когда у меня возникла эта проблема, этот пост https://stackoverflow.com/a/10601523/1782780 указал мне на ответ: у меня была ошибка в модуле дальше по цепочке.

Как объясняет Михал в этом посте:

Python не просто выбирает этот один класс из файла administrative/models.py. Вместо этого интерпретатор Python считывает весь файл, создает объект модуля, выполняет код из импортированного файла в пространстве имен новых модулей, а затем копирует имя Contract из пространства имен нового модуля в текущее пространство имен. Итак, хотя кажется, что вы импортируете только один класс из модуля, ошибка в любом месте в этом модуле может помешать успешному импорту - в вашем случае это ошибка класса ContractForm. Остальная часть трассировки подробно описывает, что именно пошло не так с этим классом.

Так что загляните дальше в свой след, и вы можете найти свою проблему.

0 голосов
/ 18 февраля 2011

Я добавил аналогичную проблему, и причина была в том, что «текущим каталогом» был «www», а не корневой каталог проекта.

...