我正在尝试自动重新加载我的django应用程序,该应用程序在我的本地Windows机器上使用apache + mod_wsgi。
我想知道在哪里添加以下文章中引用的代码:
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)
答案 0 :(得分: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相关的变体。
答案 1 :(得分:1)
您可以替换同一篇文章中上面代码块中提到的重启功能。
答案 2 :(得分: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)
答案 3 :(得分:0)
我在我的服务器上使用此代码
touch site.wsgi
它有效。在浏览器中重新加载页面后,我得到了更改页面。 可能是丑陋的 - 但很简单,没有必要重启apache。
答案 4 :(得分:0)
我在 D:\ BitNami DjangoStack 和 C上安装 Bitnami DjangoStack http://bitnami.org/stack/djangostack和 Windows XP 进行测试:\ Documents and Settings \ tsurahman \ BitNami DjangoStack projects \ myproject 作为项目目录(默认安装)
和http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Restarting_Apache_Processes一样,我添加了
MaxRequestsPerChild 1
>> 在文件 D:\ BitNami DjangoStack \ apps \ django \ conf \ django.conf
请参阅Graham Dumpleton的评论
然后我在项目目录中创建了一个文件 monitor.py ,内容与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服务器
答案 5 :(得分:0)