Django + mod_wsgi + apache: ImportError at / Нет модуля с именем djproj.urls

Я пытаюсь развернуть свое приложение Django на своем сервере linode с помощью apache и mod_wsgi.

file: /srv/www/example.com/djproj/django.wsgi

import os
import sys

sys.path.append('/srv/www/example.com/djproj')

os.environ['PYTHON_EGG_CACHE'] = '/srv/www/example.com/.python-egg'
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

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

file: /etc/apache2/sites-available/example.com

/etc/apache2/sites-available/example.com
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com

DocumentRoot /srv/www/example.com/public_html

WSGIScriptAlias / /srv/www/example.com/djproj/django.wsgi

<Directory "/srv/www/example.com/djproj">
   Order allow,deny
   Allow from all
</Directory>

ErrorLog /srv/www/example.com/logs/error.log 
CustomLog /srv/www/example.com/logs/access.log combined

When I visit / of my site I get this error:

Environment:


Request Method: GET
Request URL: http://example.com/

Django Version: 1.3
Python Version: 2.6.6
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-    py2.6.egg/django/core/handlers/base.py" in get_response
  101.                             request.path_info)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py    2.6.egg/django/core/urlresolvers.py" in resolve
  250.             for pattern in self.url_patterns:
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/core/urlresolvers.py" in _get_url_patterns
  279.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/core/urlresolvers.py" in _get_urlconf_module
  274.             self._urlconf_module = import_module(self.urlconf_name)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/utils/importlib.py" in import_module
  35.     __import__(name)

Exception Type: ImportError at /
Exception Value: No module named djproj.urls

Я не могу заставить его работать. Идеи?


person Fred Collins    schedule 30.04.2011    source источник


Ответы (6)


Либо измените все записи и импорт вашего модуля/пакета, чтобы исключить имя проекта, либо также поставьте /srv/www/site.com в sys.path.

person Ignacio Vazquez-Abrams    schedule 30.04.2011
comment
Это была и моя проблема. Почему, черт возьми, это не упоминается в документах, хотя!!!!!!!!!! Я думал, что вам просто нужно указать DJANGO_SETTINGS_MODULE, а django позаботится обо всем остальном. - person Sam; 13.05.2011
comment
Обратите внимание, что на самом деле путь должен выглядеть так: /srv/www/site.com, поскольку это соответствует тому, что автор задал в своем вопросе. - person Ignacio Vazquez-Abrams; 20.03.2014

Я второй Игнасио Васкес-Абрамс ответ. Вы должны добавить путь к вашему каталогу проекта, а также путь к его родительскому каталогу в sys.path. Вот пример файла сценария WSGI, который я использую. Я храню файл в каталоге проекта.

import os
import sys

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")))
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../")))

os.environ["DJANGO_SETTINGS_MODULE"] = "PROJECT_NAME.settings"

from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
person ayaz    schedule 30.04.2011
comment
Получение Caught VariableDoesNotExist while rendering: Failed lookup for key [0] in u'[]' при попытке вставить (или добавить) ../../ и ../ в путь - person Pierre de LESPINAY; 17.10.2011
comment
Вау, ты мой герой, бьюсь с этим уже часа 3, не подумал продвинуться дальше по списку путей. Хотел бы я больше голосовать! - person Kevin DiTraglia; 03.04.2014
comment
Вы спасли мою жизнь ! Проклятие! Я провел два дня в поисках этого решения. Спасибо чувак! - person Chiheb Nexus; 09.07.2017
comment
Большое спасибо за это. Я бил стену из-за этого в течение последних 4-5 часов!! - person Aish; 21.02.2018

Второй ответ аяза. Важно, чтобы пути, которые вы указываете, находились в начале пути поиска, а это значит, что вам нужно использовать вставку.

Вот мой. Когда я делал «дополнение», у меня периодически возникали проблемы. Это сделало его прочным. Надеюсь это поможет.

sys.path.insert(0, '/srv/www/Appname')
sys.path.insert(1, '/srv/www')
person MacGyverQue    schedule 21.12.2011
comment
Возможно, это только что спасло мне жизнь и часы устранения неполадок. - person Clocker; 20.08.2013

попробуйте следовать этому руководству - http://singlas.in/5-step-tutorial-for-using-django-with-apache-and-mod_wsgi/

Обязательно добавьте каталог Django и каталог проекта Django в системный путь. ваш wsgi.py должен выглядеть так

import os,sys

#comments
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project.settings")
sys.path.append('/path/to/your/django/directory/django_project')
sys.path.append('/path/to/your/django/directory')

#comments
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
person Shashank Singla    schedule 22.07.2013

Что исправило эту ошибку для меня -

Изменение settings.py с:

ROOT_URLCONF = «URL-адреса»

К этому:

ROOT_URLCONF = 'мой проект.urls'

person Ken    schedule 03.04.2012
comment
Это тоже было занозой в моем боку. Это было причиной. Мне пришлось искать (egrep) весь мой сайт, чтобы узнать, откуда он пытался получить файл URL-адресов. - person Furbeenator; 26.04.2012

там, где у вас есть djproj.urls, попробуйте просто urls

person darren    schedule 30.04.2011