2017-01-05 2 views
0

Я бег приложения Django с использованием Apache2 с mod_wsgi в режиме демона:Python кода в Django не перекомпиляции в режиме демона с Apache/mod_wsgi

WSGIApplicationGroup %{GLOBAL} 

WSGIDaemonProcess my_app_process 
WSGIScriptAlias /my_app /var/www/my_app/wsgi.py process-group=my_app_process 
WSGIScriptReloading On 

Всякий раз, когда я внести изменения в код Python на сервере (я знаю это сильно обескуражено, но я использую его только для отладки). У меня все время возникают проблемы с перекомпиляцией кода, но только в подкаталогах.

Файлы Python в корневом каталоге приложения (т. Е. Settings.py) получают перекомпилированные файлы, но не те, которые находятся в подкаталогах (т. Е. Views.py какого-либо приложения).

Каталог приложений принадлежит пользователю www-data, и у пользователя есть достаточные привилегии (проверено с помощью 777).

Перезапуск Apache или касание файла wsgi приводит только к перекомпиляции файлов Python в корневом каталоге приложения.

EDIT:

Я также попытался добавить директиву WSGIProcessGroup без эффекта:

WSGIApplicationGroup %{GLOBAL} 

WSGIDaemonProcess my_app_process processes=2 threads=15 
WSGIProcessGroup my_app_process 
WSGIScriptAlias /my_app /var/www/my_app/wsgi.py 
WSGIScriptReloading On 

Кроме того, с помощью кода, предоставленного here я заключил я, на самом деле, работает в режиме демона ,

EDIT # 2

Добавлена ​​Apache лог с перезапуском:

[Fri Jan 06 12:03:06.309060 2017] [wsgi:warn] [pid 28372:tid 139790316758912] mod_wsgi: Compiled for Python/2.7.8. 
[Fri Jan 06 12:03:06.309186 2017] [wsgi:warn] [pid 28372:tid 139790316758912] mod_wsgi: Runtime using Python/2.7.9. 
[Fri Jan 06 12:03:06.309876 2017] [wsgi:info] [pid 28375:tid 139790316758912] mod_wsgi (pid=28375): Starting process 'my_app' with uid=33, gid=33 and threads=15. 
[Fri Jan 06 12:03:06.310193 2017] [wsgi:info] [pid 28375:tid 139790316758912] mod_wsgi (pid=28375): Initializing Python. 
[Fri Jan 06 12:03:06.310246 2017] [wsgi:info] [pid 28376:tid 139790316758912] mod_wsgi (pid=28376): Starting process 'my_app_2' with uid=33, gid=33 and threads=15. 
[Fri Jan 06 12:03:06.310531 2017] [wsgi:info] [pid 28377:tid 139790316758912] mod_wsgi (pid=28377): Starting process 'my_app_3' with uid=33, gid=33 and threads=15. 
[Fri Jan 06 12:03:06.310607 2017] [wsgi:info] [pid 28376:tid 139790316758912] mod_wsgi (pid=28376): Initializing Python. 
[Fri Jan 06 12:03:06.310855 2017] [wsgi:info] [pid 28377:tid 139790316758912] mod_wsgi (pid=28377): Initializing Python. 
[Fri Jan 06 12:03:06.311029 2017] [mpm_event:notice] [pid 28372:tid 139790316758912] AH00489: Apache/2.4.10 (Debian) mod_wsgi/4.3.0 Python/2.7.9 configured -- resuming normal operations 
[Fri Jan 06 12:03:06.311057 2017] [mpm_event:info] [pid 28372:tid 139790316758912] AH00490: Server built: Sep 15 2016 20:44:43 
[Fri Jan 06 12:03:06.311071 2017] [core:notice] [pid 28372:tid 139790316758912] AH00094: Command line: '/usr/sbin/apache2' 
[Fri Jan 06 12:03:06.311379 2017] [wsgi:info] [pid 28379:tid 139790316758912] mod_wsgi (pid=28379): Initializing Python. 
[Fri Jan 06 12:03:06.311507 2017] [wsgi:info] [pid 28378:tid 139790316758912] mod_wsgi (pid=28378): Initializing Python. 
[Fri Jan 06 12:03:06.324667 2017] [wsgi:info] [pid 28377:tid 139790316758912] mod_wsgi (pid=28377): Attach interpreter ''. 
[Fri Jan 06 12:03:06.324671 2017] [wsgi:info] [pid 28376:tid 139790316758912] mod_wsgi (pid=28376): Attach interpreter ''. 
[Fri Jan 06 12:03:06.324843 2017] [wsgi:info] [pid 28377:tid 139790316758912] mod_wsgi (pid=28377): Adding '/var/anaconda2/lib/python2.7/site-packages' to path. 
[Fri Jan 06 12:03:06.324864 2017] [wsgi:info] [pid 28376:tid 139790316758912] mod_wsgi (pid=28376): Adding '/var/anaconda2/lib/python2.7/site-packages' to path. 
[Fri Jan 06 12:03:06.324988 2017] [wsgi:info] [pid 28378:tid 139790316758912] mod_wsgi (pid=28378): Attach interpreter ''. 
[Fri Jan 06 12:03:06.329741 2017] [wsgi:info] [pid 28379:tid 139790316758912] mod_wsgi (pid=28379): Attach interpreter ''. 
[Fri Jan 06 12:03:06.335879 2017] [wsgi:info] [pid 28375:tid 139790316758912] mod_wsgi (pid=28375): Attach interpreter ''. 
[Fri Jan 06 12:03:06.336042 2017] [wsgi:info] [pid 28375:tid 139790316758912] mod_wsgi (pid=28375): Adding '/var/anaconda2/lib/python2.7/site-packages' to path. 
[Fri Jan 06 12:03:13.598083 2017] [wsgi:info] [pid 28375:tid 139790204262144] [remote 10.6.6.58:512] mod_wsgi (pid=28375, process='my_app', application=''): Loading WSGI script '/var/www/my_app/wsgi.py'. 

Добавлен Apache журнал от прикосновения сценарий WSGI:

[Fri Jan 06 12:12:28.348075 2017] [wsgi:info] [pid 28835:tid 139790316758912] mod_wsgi (pid=28835): Shutdown requested 'my_app'. 
[Fri Jan 06 12:12:28.348217 2017] [wsgi:info] [pid 28835:tid 139790316758912] mod_wsgi (pid=28835): Stopping process 'my_app'. 
[Fri Jan 06 12:12:28.348237 2017] [wsgi:info] [pid 28835:tid 139790316758912] mod_wsgi (pid=28835): Destroying interpreters. 
[Fri Jan 06 12:12:28.348244 2017] [wsgi:info] [pid 28835:tid 139790316758912] mod_wsgi (pid=28835): Cleanup interpreter ''. 
[Fri Jan 06 12:12:28.348954 2017] [wsgi:info] [pid 28835:tid 139790316758912] mod_wsgi (pid=28835): Terminating Python. 
[Fri Jan 06 12:12:28.469333 2017] [wsgi:info] [pid 28835:tid 139790316758912] mod_wsgi (pid=28835): Python has shutdown. 
[Fri Jan 06 12:12:28.469366 2017] [wsgi:info] [pid 28835:tid 139790316758912] mod_wsgi (pid=28835): Exiting process 'my_app'. 
[Fri Jan 06 12:12:29.129042 2017] [wsgi:info] [pid 28372:tid 139790316758912] mod_wsgi (pid=28835): Process 'my_app' has died, deregister and restart it. 
[Fri Jan 06 12:12:29.129094 2017] [wsgi:info] [pid 28372:tid 139790316758912] mod_wsgi (pid=28835): Process 'my_app' terminated normally, exit code 0 
[Fri Jan 06 12:12:29.129099 2017] [wsgi:info] [pid 28372:tid 139790316758912] mod_wsgi (pid=28835): Process 'my_app' has been deregistered and will no longer be monitored. 
[Fri Jan 06 12:12:29.129764 2017] [wsgi:info] [pid 28917:tid 139790316758912] mod_wsgi (pid=28917): Starting process 'my_app' with uid=33, gid=33 and threads=15. 
[Fri Jan 06 12:12:29.130173 2017] [wsgi:info] [pid 28917:tid 139790316758912] mod_wsgi (pid=28917): Initializing Python. 
[Fri Jan 06 12:12:29.144492 2017] [wsgi:info] [pid 28917:tid 139790316758912] mod_wsgi (pid=28917): Attach interpreter ''. 
[Fri Jan 06 12:12:29.144687 2017] [wsgi:info] [pid 28917:tid 139790316758912] mod_wsgi (pid=28917): Adding '/var/anaconda2/lib/python2.7/site-packages' to path. 
[Fri Jan 06 12:12:29.147279 2017] [wsgi:info] [pid 28917:tid 139790204262144] [remote 10.6.6.58:512] mod_wsgi (pid=28917, process='my_app', application=''): Loading WSGI script '/var/www/my_app/wsgi.py'. 
+1

Может ли вы на самом деле выяснить, что вы имеете в виду под «перекомпиляцией» поэтому мы знаем, что мы говорим об одном и том же. Обычно не говорится о перекомпиляции кода Python. Вы только говорите о перезапущенных процессах, и когда это происходит, они загружают последний код Python? Или вы действительно хотите посмотреть, генерируются ли новые файлы '.pyc'' из' '.py'' файлов? Вы пытались удалить все файлы '.pyc''? –

+0

Да, я говорю о реальных файлах .pyc, которые не восстанавливаются при каждом изменении файлов .py. Файлы .pyc не восстанавливаются даже после удаления старых. Это даже не нарушает работу приложения, а работает без плагинов .pyc. Кажется, что скомпилированная версия старого кода все еще кэшируется где-то. – wishiknew

+0

Обычно под Apache/mod_wsgi файлы '.pyc'' не будут восстановлены, потому что пользователь Apache запускает ваш код, так как в любом случае не будет доступа на запись к каталогам/файлам. Это нормально, поскольку они обычно являются долгоживущими процессами, поэтому вы не получаете их от них, так как не часто загружаете код. –

ответ

0

Похоже, ваш отсутствует WSGIProcessGroup директиву :

https://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html#delegation-to-daemon-process

Для того, чтобы использовать режим демона для WSGI приложений, размещенных в конкретном месте, в WSGIDaemonProcess и WSGIProcessGroup директивы должны быть определены. Например, чтобы настроить процесс демона группы , содержащий два многопоточных процесса можно использовать: WSGIDaemonProcess example.com процессов = 2 нити = 15 WSGIProcessGroup example.com

Это, как говорится, если вопросы, вам не нужно отлаживать специфичны для вашей конфигурации развертывания, вам лучше работать локально с builtin dev server

+0

Пробовал добавлять директиву без эффекта (см. Редактирование). – wishiknew

+0

Duh ... мой mod_wsgi fu может не быть в курсе, но что-то сработало. –

+0

Вы пытались настроить уровень журнала на информацию и просмотр своих журналов (как журналов вашего хоста, так и основных журналов Apache)? –

0

Возможно, вы видите изменения из-за неправильной работы во встроенном режиме, что, вероятно, означает, что новый процесс получает запрос, если используется предварительный просмотр MPM ,

В дополнении к правильной настройке внедренного режима, который является предпочтительным, прочитайте документацию по исходному коду перегрузки по адресу:

+0

Все указывает на то, что я правильно работаю в режиме демона (проверен с помощью WSGI-скрипта из документов). Я также использовал сценарий WSGI отсюда http://blog.dscpl.com.au/2012/10/why-are-you-using-embedded-mode-of.html, чтобы определить, что я, скорее всего, работаю на рабочем MPM. Бинарный файл Apache не предоставил информацию MPM. Далее я расскажу о настройке встроенного режима. – wishiknew

+0

Вы _dont_ хотите запустить во встроенном режиме, определенно –

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