Джанго Apache FastCGI перезагрузка - PullRequest
1 голос
/ 23 февраля 2011

В соответствии с Django docs Django можно настроить с помощью FastCGI.

Вот наша настройка (обратите внимание, что я не контролирую настройку Apache на своем рабочем месте, и мне необходимо использовать FastCGI, поскольку он у нас уже есть, а не устанавливать WSGI):

fcgi-релевантная часть нашего apache conf:

LoadModule fastcgi_module modules/mod_fastcgi.so

# IPC directory location
#
FastCgiIpcDir "/path/to/FastCGI_IPC"

# General CGI config
#
FCGIConfig -idle-timeout 30 -listen-queue-depth 4 -maxProcesses 40 -minProcesses 10 -maxClassProcesses 2 -killInterval 60 -updateInterval 20 -singleThreshhold 0 -multiThreshhold 10 -processSlack 5 -failed-restart-delay 10

# To use FastCGI scripts:
#
AddHandler fastcgi-script .fcg .fcgi .fpl

FastCgiServer "/path/to/my/django.fcgi" -listen-queue-depth 24 -processes 8 -restart-delay 1 -min-server-life 2 -failed-restart-delay 10

Последняя строка должна быть наиболее актуальной. Мой django.fcgi:

#!/path/to/python-2.5/bin/python
import sys, os

open('pid', "w").write("%d" % (os.getpid()))

# Add a custom Python path.
sys.path.insert(0, "/path/to/django/")
sys.path.insert(0, "/path/to/python2.5/site-packages/")

# Switch to the directory of your project. (Optional.)
os.chdir("/path/to/django/site")

# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "site.settings"

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")

Согласно

http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/#restarting-the-spawned-server

перезапуск fcgi должен быть таким простым, как

touch django.fcgi

но для нас это не приводит к перезапуску (именно поэтому я записываю pid в файлы).

Почему не работает тач django.fcgi?

Ответы [ 2 ]

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

Хорошо, тогда фактический ответ на ваш вопрос.:)

Похоже, вам не хватает опции.

-autoUpdate (нет)

Заставляет mod_fastcgi проверить время модификацииприложения на диске перед обработкой каждого запроса.Если приложение на диске было изменено, диспетчер процессов получает уведомление, и все запущенные экземпляры приложения удаляются.В общем, предпочтительно, чтобы этот тип функциональности был встроен в приложение (например, при каждом сотом запросе оно проверяет, есть ли на диске более новая версия, и завершает работу, если так).При использовании этой опции с -restart может возникнуть нерешенная проблема (ошибка).

- http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiConfig

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

Не знаю, но могу предложить альтернативное решение, которое не требует установки чего-либо:

Просто запустите django на произвольном порту localhost (скажем, 50000), а затем сделайте следующее:

RewriteEngine On
RewriteRule ^(.*)$ http://localhost:50000/$1 [P]

Все, что для этого требуется, это стандартные mod_rewrite и mod_proxy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...