2009-01-11 88 views
0

我将所有Django站点都作为SCGI守护程序运行。我不会进入的,为什么我这样做基本面,但是这意味着,当一个网站正在运行,有一组从下面的命令运行的进程:从VCS更新现场服务器

/websites/website-name/manage.py runfcgi method=threaded host=127.0.0.1 port=3036 protocol=scgi 

一切都很好,直到我想滚从VCS发布一个新版本(我的情况是Bazaar)。我做了一个别名脚本调用,做如下:

alias up='bzr up; killall manage.py' 

这是通用的,原因很简单:我很懒。我想要一个可以在任何网站下使用的命令来更新它。无论如何,我大部分时间都登录了服务器,因此,我只是跳到正确的站点的根目录并致电up。来自BZR的网站更新并重新启动。

它的第一个缺点是它杀死了机器上的所有manage.py进程。目前有6个网站正在迅速增长。第二个(也可能更糟 - 至少对于最终用户来说)是严重的非优雅重启。如果有人正在上传图片或做长时间连接的其他事情,他们的请求就会死在藤蔓上。

所以,我正在寻找的是对于一个方法建议:

  1. 是通用懒人像我这样的(例如,我可以从任何站点根目录下运行,而不必记住哪个命令我需要调用;。'up'是名完美
  2. 只有杀死当前站点,我只更新当前站点,因此仅这一项应该死
  3. 是否以优雅的方式重新启动如果可能的话,它应该等到没有更多的活动连接时,我不知道这有多可行。

回答

2

而不是使用名称中的manage.py来杀死所有的东西,您可以为每个只杀死manage.py进程的站点编写脚本吗? (编辑:只需编写脚本并将它们放入每个站点的根目录(您仍然可以cd)然后运行这些脚本,但仍然只有一条命令要记住)

我对SCGI或Bazaar不太了解,远不止这些......我的方法(我也很懒)使用Mercurial和Fabric进行部署:http://stevelosh.com/blog/entry/2009/1/15/deploying-site-fabric-and-mercurial/ –也许它会给你一个想法,你可以使用?