2013-07-10 2 views
3

У меня есть приложение django (https://github.com/wjdp/nt-tickets) с файлом settings.py в корневом каталоге, а не в подкаталоге nt-tickets. Это прекрасно работает как в wsgi.py и manage.py следующая строка была изменена, чтобы отразить изменение:Модуль настроек Gunicorn и django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") 

Я планирую использовать gunicorn для развертывания, и я бегу на вопрос. Gunicorn игнорирует эту строку и предполагает, что файл настроек будет nt_tickets.settings. Я начинаю gunicorn как это:

gunicorn wsgi:application 

и получаю эту ошибку:

ImportError: Could not import settings 'nt_tickets.settings' (Is it on sys.path?): No module named nt_tickets.settings 

Я обнаружил, что положить --settings "settings" на конце команды для устранения проблемы, но почему я того, чтобы сделать это? Разумеется, достаточно переменной окружения, установленной в wsgi.py? Это может показаться мелким, я стараюсь не повторять себя.


Полный след:

2013-07-10 01:12:12 [29417] [ERROR] Error handling request 
Traceback (most recent call last): 
    File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 126, in handle_request 
    respiter = self.wsgi(environ, resp.start_response) 
    File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 236, in __call__ 
    self.load_middleware() 
    File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 45, in load_middleware 
    for middleware_path in settings.MIDDLEWARE_CLASSES: 
    File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/django/conf/__init__.py", line 53, in __getattr__ 
    self._setup(name) 
    File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in _setup 
    self._wrapped = Settings(settings_module) 
    File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/django/conf/__init__.py", line 134, in __init__ 
    raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) 
ImportError: Could not import settings 'nt_tickets.settings' (Is it on sys.path?): No module named nt_tickets.settings 
+0

проверьте файл 'manage.py'. Он все еще может иметь старые настройки – karthikr

+0

, как упоминалось в вопросе 'manage.py' в порядке (https://raw.github.com/wjdp/nt-tickets/master/manage.py) – wjdp

ответ

2

У меня та же проблема, что еще хуже, Другой проект, который имеет ту же структуру, работает хорошо. Я считаю, что django не меняет путь DJANGO_SETTINGS_MODULE, поэтому в wsgi.py я устанавливаю его так: os.environ ['DJANGO_SETTINGS_MODULE'] = "settings" Это может решить проблему.

+0

в настоящее время немного занят, но будет дайте это позже – wjdp

0

Я исправил проблему, перемещая мой файл wsgi.py из моей папки django_project. поэтому для случая, указанного OP ('nt_tickets.settings'). ему нужно переместить файл wsgi.py из папки nt_tickets, и это должно сделать трюк.

1

Под python3.4, помещая файл __init__.py в мой каталог настроек, исправлена ​​проблема.

Смежные вопросы