当我和其所有依赖模块所在的文件夹中的任何文件发生更改时,我试图触发重新加载我的WSGI进程。
我已经阅读了http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode而我想到我明白了,但这种间歇性的陈旧让我怀疑自己。我在这样的守护进程模式下运行:
DocumentRoot /usr/local/www/mysite.com/public_html
WSGIScriptAlias /api /usr/local/www/mysite.com/server/server.py
WSGIPassAuthorization On
WSGIDaemonProcess mysite.com threads=15 python-path=/usr/local/www/mysite.com/server
WSGIProcessGroup mysite.com
server.py是主要的WSGI应用程序文件,它导入的所有模块(可能会更改)都与它在同一个文件夹中。
这就是我提出来的,它似乎在大多数情况下工作但偶尔我会遇到模块(我对源文件进行了更改并且进程重新启动但是它似乎加载了旧模块码)。一些缓存问题?如果重新启动进程,我认为导入将获得新代码?我真的想避免使用reload()。重新启动Apache总是打开它并获取更改。
#!/bin/bash
while true; do
inotifywait . -e modify,create --exclude server.py -q
if (($? == 0)); then
touch server.py
else
exit 0
fi
done
我是否正确地认为这(或类似的东西)应该起作用,还是我在错误的树上吠叫?
根WSGI文件(server.py)非常小:
print "Server restart"
import sys, types, os, web
import api
import user # /api/user
import list # /api/list
@api.path('/info')
class info(api.Handler):
@api.params({
'params': {'echo': unicode }
})
def Post(self, data):
return api.JSON({'info': 'foo', 'echo': data['echo']})
@api.path('/(.*)')
class notfound(api.Handler):
def Get(self):
api.error('404 page not found')
app = web.application(api.urls(), globals())
if __name__ == '__main__':
app.run()
else:
application = app.wsgifunc()