Разверните Django на Apache 2.4

Я пытался развернуть свое приложение Django на Ubuntu 14.04 с установленными пакетами:

django 1.4.15
apache 2.4
python 2.7
mod_wsgi 3.4 (there is one compiled as mod_wsig.so-2.7 which is the one I use)

в моей конфигурации apache у меня есть эти поля:

# Modules
LoadModule mpm_worker_module /usr/lib/apache2/modules/mod_mpm_worker.so
LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
LoadModule alias_module /usr/lib/apache2/modules/mod_alias.so
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-2.7
LoadModule setenvif_module /usr/lib/apache2/modules/mod_setenvif.so
LoadModule authn_core_module /usr/lib/apache2/modules/mod_authn_core.so
LoadModule authz_core_module /usr/lib/apache2/modules/mod_authz_core.so
...
<Directory />
    Options FollowSymLinks
    AllowOverride None
    AuthType none
    Require all granted
</Directory>
...
# And finally the app config.
WSGIPythonHome /home/web/.virtualenvs/web
WSGIPythonPath /PATH/TO/MYSITE:/home/web/.virtualenvs/web/lib/python2.7/site-packages
WSGIScriptAlias / "/PATH/TO/wsgi.py"

Кажется, все в порядке, пока я не попытаюсь импортировать один из локальных модулей в свою систему. Под этим я подразумеваю, что скрипт wsgi.py запускается без проблем, а затем запускается django settings.py, в настройках у меня есть этот код:

from MYSITE.environments.prod_settings import *

environments — это модуль со своим собственным __init__.py файлом и всем остальным. но когда он достигает этой строки, он не может импортировать.

Другая часть заключается в том, что сайт работает отлично, когда я запускаю ./manage.py runserver, и информация в sys.path точно такая же!

У меня просто нет идей, почему apache wsgi не позволит мне импортировать этот модуль python.

Вот последние журналы:

[Fri Nov 28 18:07:06.222374 2014] [core:notice] [pid 3639:tid 140258688976768] AH00094: Command line: '/usr/sbin/apache2'
[Fri Nov 28 18:07:09.322057 2014] [:error] [pid 3642:tid 140258619721472] /home/web/.virtualenvs/web   <--- printed the sys.prefix
[Fri Nov 28 18:07:09.673877 2014] [:error] [pid 3642:tid 140258619721472] 2014-11-28 18:07:09,670 (3642/MainThread) newrelic ERROR - Falling back to stderr logging as unable to create log file '/var/log/newrelic/newrelic-python-agent.log'.
[Fri Nov 28 18:07:09.673930 2014] [:error] [pid 3642:tid 140258619721472] Traceback (most recent call last):
[Fri Nov 28 18:07:09.673941 2014] [:error] [pid 3642:tid 140258619721472]   File "/home/web/.virtualenvs/web/local/lib/python2.7/site-packages/newrelic-2.28.0.26/newrelic/common/log_file.py", line 79, in initialize_logging
[Fri Nov 28 18:07:09.673950 2014] [:error] [pid 3642:tid 140258619721472]     _initialize_file_logging(log_file, log_level)
[Fri Nov 28 18:07:09.673959 2014] [:error] [pid 3642:tid 140258619721472]   File "/home/web/.virtualenvs/web/local/lib/python2.7/site-packages/newrelic-2.28.0.26/newrelic/common/log_file.py", line 51, in _initialize_file_logging
[Fri Nov 28 18:07:09.673969 2014] [:error] [pid 3642:tid 140258619721472]     handler = logging.FileHandler(log_file)
[Fri Nov 28 18:07:09.673977 2014] [:error] [pid 3642:tid 140258619721472]   File "/usr/lib/python2.7/logging/__init__.py", line 903, in __init__
[Fri Nov 28 18:07:09.673985 2014] [:error] [pid 3642:tid 140258619721472]     StreamHandler.__init__(self, self._open())
[Fri Nov 28 18:07:09.673993 2014] [:error] [pid 3642:tid 140258619721472]   File "/usr/lib/python2.7/logging/__init__.py", line 928, in _open
[Fri Nov 28 18:07:09.674001 2014] [:error] [pid 3642:tid 140258619721472]     stream = open(self.baseFilename, self.mode)
[Fri Nov 28 18:07:09.674009 2014] [:error] [pid 3642:tid 140258619721472] IOError: [Errno 13] Permission denied: '/var/log/newrelic/newrelic-python-agent.log'
[Fri Nov 28 18:07:09.985905 2014] [:error] [pid 3642:tid 140258619721472] No module named wizzytest2   <---- My module name

После ошибки модуля в журналах появляются ошибки о проблемах с подключением к базе данных в целом. Это происходит потому, что в модуле wizzytest2 у меня есть переопределение настроек, поэтому это ожидается.

[Sat Nov 29 21:37:44.923879 2014] [:error] [pid 6097:tid 140297485195008] '/home/web/.virtualenvs/web'  <-- python home
[Sat Nov 29 21:37:44.924177 2014] [:error] [pid 6097:tid 140297485195008] ['/home/web/.virtualenvs/web/lib/python2.7/site-packages',
[Sat Nov 29 21:37:44.924230 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/MYSITE/mysite',
[Sat Nov 29 21:37:44.924256 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/.virtualenvs/web/src/python-itunes',
[Sat Nov 29 21:37:44.924287 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/.virtualenvs/web/lib/python2.7',
[Sat Nov 29 21:37:44.924312 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/.virtualenvs/web/lib/python2.7/plat-x86_64-linux-gnu',
[Sat Nov 29 21:37:44.924342 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/.virtualenvs/web/lib/python2.7/lib-tk',
[Sat Nov 29 21:37:44.924366 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/.virtualenvs/web/lib/python2.7/lib-old',
[Sat Nov 29 21:37:44.924395 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/.virtualenvs/web/lib/python2.7/lib-dynload',
[Sat Nov 29 21:37:44.924419 2014] [:error] [pid 6097:tid 140297485195008]  '/usr/lib/python2.7',
[Sat Nov 29 21:37:44.924449 2014] [:error] [pid 6097:tid 140297485195008]  '/usr/lib/python2.7/plat-x86_64-linux-gnu',
[Sat Nov 29 21:37:44.924483 2014] [:error] [pid 6097:tid 140297485195008]  '/usr/lib/python2.7/lib-tk',
[Sat Nov 29 21:37:44.924557 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/.virtualenvs/web/local/lib/python2.7/site-packages',
[Sat Nov 29 21:37:44.924583 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/.virtualenvs/web/local/lib/python2.7/site-packages/newrelic-2.28.0.26',
[Sat Nov 29 21:37:44.924615 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/.virtualenvs/web/lib/python2.7/site-packages',
[Sat Nov 29 21:37:44.924641 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/.virtualenvs/web/lib/python2.7/site-packages/newrelic-2.28.0.26',
[Sat Nov 29 21:37:44.924663 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/MYSITE',
[Sat Nov 29 21:37:44.924695 2014] [:error] [pid 6097:tid 140297485195008]  '/home/web/MYSITE/mysite']
[Sat Nov 29 21:37:45.474168 2014] [:error] [pid 6097:tid 140297485195008] No module named wizzytest2

Просто добавил путь к Python, чтобы его было легче отлаживать. Я также исправил проблему с newrelic, но это не имеет значения, найден файл настроек wizzytest2 или нет.


person Hassek    schedule 28.11.2014    source источник
comment
Вы пытались запустить вас runserver с django-admin.py в другом каталоге, чем ваш проект?   -  person Zulu    schedule 29.11.2014
comment
И можете ли вы предоставить сообщения ImportError и журналы ошибок apache?   -  person Zulu    schedule 29.11.2014
comment
только что обновил ответ с помощью журналов.   -  person Hassek    schedule 29.11.2014
comment
Где находится wizzytest2 и это пакет (каталог) или модуль?   -  person Zulu    schedule 30.11.2014
comment
это каталог с собственным init.py. Мне удалось заставить django работать, не пытаясь импортировать этот wizzytest2, который хоть что-то. Тем не менее, мне нужно такое поведение для производственных сред.   -  person Hassek    schedule 30.11.2014


Ответы (2)


Теперь с вашими журналами я думаю, что проблема очевидна:

IOError: [Errno 13] Permission denied: '/var/log/newrelic/newrelic-python-agent.log/'

Пользователь, запускающий ваше приложение, не имеет права записи в '/var/log/newrelic/newrelic-python-agent.log'.

Возможно, chmod -R +w '/var/log/newrelic/' сможет вам помочь. Но на самом деле вы должны поместить пользователя, запускающего ваше приложение, в соответствующую группу, которая может писать логи.

Примечание. Следует использовать uWSGI или Gunicorn для управления вашим приложением и использования apache только в качестве внешнего интерфейса.

person Zulu    schedule 29.11.2014
comment
Я знаю о проблеме newrelic. Дело в том, что это не должно влиять на чтение python или файл настроек wizzytest2 для переопределения некоторых полей. Мой главный вопрос: почему он не может найти тот файл, который находится на пути к Python? - person Hassek; 30.11.2014

В конце концов, это была проблема с разрешениями на файл переопределяющих настроек, который я хотел импортировать, в конце мне просто нужно было сделать chown web:web для файла и chmod.

person Hassek    schedule 23.12.2014