我将所有Django站点作为SCGI守护进程运行。我不会深入了解为什么我这样做,但这意味着当一个站点运行时,有一组进程从以下命令运行:
/websites/website-name/manage.py runfcgi method=threaded host=127.0.0.1 port=3036 protocol=scgi
一切都很好,直到我想从VCS推出新版本(在我的案例中为Bazaar)。我创建了一个名为up的别名脚本,它执行以下操作:
alias up='bzr up; killall manage.py'
这个泛型只是一个简单的原因:我很懒。我想要一个可以在任何站点下使用的命令来更新它。我大部分时间都登录到了服务器,因此,我只是跳到正确网站的根目录并致电up
。 BZR的站点更新并重新启动。
这样做的第一个缺点是它会杀死计算机上的所有manage.py进程。目前有6个站点并且增长迅速。第二个(可能更糟 - 至少对于最终用户而言)是一次非常不优雅的重启。如果有人上传图片或者用很长的连接时间做其他事情,他们的请求就会死在藤蔓上。
所以我正在寻找的是单一方法的建议:
'up'
在名称上是完美的。答案 0 :(得分:2)
而不是使用名称中的manage.py来杀死所有内容,您是否可以为每个仅从该站点杀死manage.py进程的站点编写脚本? (编辑:只需编写脚本并将它们放在每个站点的根目录中(无论如何都是cd)并运行它们 - 仍然只记住一个命令)
我对SCGI或Bazaar的了解不够多......我的方法(我也很懒)使用Mercurial和Fabric进行部署:http://stevelosh.com/blog/entry/2009/1/15/deploying-site-fabric-and-mercurial/ - 也许它会给你一个你可以使用的想法吗?