2009-01-11 159 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/ –也許它會給你一個想法,你可以使用?