lighttpd、Django、FastCGI 和自动重载?
我在想,有没有人用这种设置让fcgi自动重载过?我尝试过用django的autoreload.py来实现重载机制(把它复制到我自己的位置,然后调用autoreload.main(start)),但在进程分叉时遇到了错误,像这样:
django/core/servers/fastcgi.py", line 180,
in runfastcgi WSGIServer(WSGIHandler(), **wsgi_opts).run()
File "build/bdist.freebsd-6.4-RELEASE-p9-amd64/egg/flup/server/fcgi_fork.py", line 140,
in run
File "build/bdist.freebsd-6.4-RELEASE-p9-amd64/egg/flup/server/preforkserver.py", line 119,
in run
File "build/bdist.freebsd-6.4-RELEASE-p9-amd64/egg/flup/server/preforkserver.py", line 450,
in _installSignalHandlers ValueError: signal only works in main thread
我理想的设置是能够在每次检测到代码变化后,重载或杀掉我的fcgi进程,然后启动一个新的进程,类似于django在它的内部服务器中做的那样。我还尝试过去掉autoreload.py中的线程部分,这样可以避免这个错误,但似乎服务器还是不能正常运行(我还在调查这个问题)。
也许有人在django的settings.py文件中尝试过CherryPies的autoreload.py?
1 个回答
0
我用这个方法让它正常工作了:http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode。我使用了一个监控脚本,在加载我的fastcgi进程之前运行它,再加上supervisord的帮助,这样就能顺利运行了。