Apache Django Mod_Wsgi - автоматическая перезагрузка

Я пытаюсь автоматически перезагрузить приложение django, которое использует apache + mod_wsgi на моей локальной машине с Windows.

Я хотел бы знать, куда добавить этот код, на который есть ссылки в следующей статье:

http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

def _restart(path):
    _queue.put(True)
    prefix = 'monitor (pid=%d):' % os.getpid()
    print >> sys.stderr, '%s Change detected to \'%s\'.' % (prefix, path)
    print >> sys.stderr, '%s Triggering Apache restart.' % prefix
    import ctypes
    ctypes.windll.libhttpd.ap_signal_parent(1)

Ответы на вопрос(5)

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

 Eeyore07 июл. 2009 г., 21:53
Спасибо, я попробую это.
 Eeyore07 июл. 2009 г., 20:05
Где этот блок кода?
 07 июл. 2009 г., 21:11
У вас должен быть какой-то файл сценария, который ваше приложение WSGI использует в качестве точки входа. Вот где код принадлежит. Если у вас нет этого файла, вам нужно будет найти способ сделать это, прежде чем работать с автоматической перезагрузкой.

Я использую этот код на моем сервере

touch site.wsgi

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

 15 июл. 2011 г., 01:31
Это работает только в режиме демона в системах UNIX, а не в Windows.

Читать:

http://blog.dscpl.com.au/2008/12/using-modwsgi-when-developing-django.html

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

http://blog.dscpl.com.au/2009/02/source-code-reloading-with-modwsgi-on.html

который объясняет варианты первого, связанные с Windows.

Я проверяю это сBitnami DjangoStack http://bitnami.org/stack/djangostack а такжеWindows XP установлен наD:\BitNami DjangoStack а такжеC:\Documents and Settings\tsurahman\BitNami DjangoStack projects\myproject как каталог проекта (установка по умолчанию)

as in http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Restarting_Apache_Processes, Я добавил

MaxRequestsPerChild 1

in file D:\BitNami DjangoStack\apps\django\conf\django.conf см. комментарий Грэма Дамплтона

тогда я создал файлmonitor.py в моемproject directory с содержанием как вhttp://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Monitoring_For_Code_Changes и заменить_restart метод сhttp://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Restarting_Windows_Apacheвот часть сценария

....

_running = False
_queue = Queue.Queue()
_lock = threading.Lock()

def _restart(path):
    _queue.put(True)
    prefix = 'monitor (pid=%d):' % os.getpid()
    print >> sys.stderr, '%s Change detected to \'%s\'.' % (prefix, path)
    print >> sys.stderr, '%s Triggering Apache restart.' % prefix
    import ctypes
    ctypes.windll.libhttpd.ap_signal_parent(1)

def _modified(path):
    try:

....

и в файлеD:\BitNami DjangoStack\apps\django\scripts\django.wsgi,

....

import django.core.handlers.wsgi

import monitor
monitor.start(interval=1.0)
monitor.track(os.path.join(os.path.dirname(__file__), 'site.cf'))

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

а затем перезапустите сервер Apache

 04 авг. 2011 г., 15:00
Вы не должны одновременно использовать MaxRequestPerChild со значением 1 и код монитора. Это две разные техники. Первый будет перезагружаться при каждом запросе. Последний будет перезапущен только после изменения кода. Если вы установите директиву, код монитора станет бессмысленным, так как он будет перезапускать каждый запрос в любом случае.

Вы заменяете функцию перезапуска в следующем блоке кода, который вы найдете на странице:

Monitoring For Code Changes

The use of signals to restart a daemon process could also be employed in a mechanism which automatically detects changes to any Python modules or dependent files. This could be achieved by creating a thread at startup which periodically looks to see if file timestamps have changed and trigger a restart if they have.

Example code for such an automatic restart mechanism which is compatible with how mod_wsgi works is shown below.

import os
import sys
import time
import signal
import threading
import atexit
import Queue

_interval = 1.0
_times = {}
_files = []

_running = False
_queue = Queue.Queue()
_lock = threading.Lock()

def _restart(path):
    _queue.put(True)
    prefix = 'monitor (pid=%d):' % os.getpid()
    print >> sys.stderr, '%s Change detected to \'%s\'.' % (prefix, path)
    print >> sys.stderr, '%s Triggering process restart.' % prefix
    os.kill(os.getpid(), signal.SIGINT)
 Eeyore07 июл. 2009 г., 20:46
Я знаю это, но где в файловой системе этот код? Имя файла и т.д ...

Ваш ответ на вопрос