Apache Django Mod_Wsgi – 自动重载

我试图自动重新加载我的本地Windows机器上使用Apache + mod_wsgi的Django应用程序。

我想知道我在哪里添加下面的文章中引用的代码:

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) 

Solutions Collecting From Web of "Apache Django Mod_Wsgi – 自动重载"

读:

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相关的第一个变体。

您替换同一篇文章中上面的代码块中提到的重新启动函数。

您可以在您在页面上找到的以下代码块中替换重新启动功能:

 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) 

我在我的服务器上使用这个代码

 touch site.wsgi 

它的工作。 在浏览器重新加载页面后,我得到页面的变化。 可能是丑陋 – 但简单,没有必要重新启动Apache。

我使用Bitnami DjangoStack http://bitnami.org/stack/djangostack和安装在D:\ BitNami DjangoStackC:\ Documents and Settings \ tsurahman \ BitNami DjangoStack projects \ myproject上的Windows XP作为项目目录(默认安装)

如在http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Restarting_Apache_Processes中 ,我添加

 MaxRequestsPerChild 1 

在文件D:\ BitNami DjangoStack \ apps \ django \ conf \ django.conf中查看Graham Dumpleton的评论

然后我使用http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Monitoring_For_Code_Changes中的内容在我的项目目录中创建了一个文件monitor.py ,并用http://code.google.com替换_restart方法/ 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服务器