Вопрос по django, mod-wsgi, apache – Apache Django Mod_Wsgi - автоматическая перезагрузка

4

Я пытаюсь автоматически перезагрузить приложение 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   ответов
1

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

У вас должен быть какой-то файл сценария, который ваше приложение WSGI использует в качестве точки входа. Вот где код принадлежит. Если у вас нет этого файла, вам нужно будет найти способ сделать это, прежде чем работать с автоматической перезагрузкой.
Где этот блок кода? Eeyore
Спасибо, я попробую это. Eeyore
0

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

touch site.wsgi

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

Это работает только в режиме демона в системах UNIX, а не в Windows.
5

Читать:

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.

0

Я проверяю это с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

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

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

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)
Я знаю это, но где в файловой системе этот код? Имя файла и т.д ... Eeyore

Похожие вопросы