要是你的機器上同時跑好幾支Rails程式,而每支程式都透過proxy轉換不同port,當你常常需要開關不同程式時該怎麼辦?通常都是start或stop Mongrel server。
stop就是切換到rails project目錄,然後下mongrel_rails stop:
cd ~/projects/myrails mongrel_rails stopstart可麻煩了,你得先去proxy設定檔查出對應哪個port:
cat /etc/lighttpd/conf-enabled/10-proxy.conf
--
$HTTP["host"] == "myrails.pbg4.org" {
proxy.server = (
"" => (
"myrails" => (
"host" => "127.0.0.1",
"port" => 6100)))
}查出來之後,再切換到rails project目錄去下start指令:cd ~/projects/myrails mongrel_rails start -d -p 6100機器上只有一、兩支Rails程式倒還好,四、五支以上就累人了。
Google可以找到控制Mongrel開關的小程式幾乎都是給Mongrel cluster用的,而我的Mongrel cluster只會在正式機上跑,基本上正式機的production環境也只會跑一支程式,開關也不會太頻繁,頂多是拿來重開機時把Mongrel cluster帶起來而已,用處真的不大。
反而是在測試、開發平台,也許需要debug或切換不同模式之類的,比較容易開開關關。
那麼,可以不用查proxy port而隨時開開關關Mongrel server的小程式在哪裡呢?那就自己來寫一支吧。
我用Ruby寫了支mong.rb的小程式,這支小程式大致上有幾個用途:
列出所有Rails程式的目錄與port:
mong.rb list Directory: /home/winson/projects Port 6100: MONEY Port 6200: RADIANT Port 6300: MEPHISTO Port 6400: DEVALOT列出所有Rails程式的狀態:
mong.rb status Status Shutdown: MONEY Status Running: RADIANT Status Running: MEPHISTO Status Running: DEVALOT關閉某支程式的Mongrel server:
mong.rb stop money Shutdown MONEY... Sending TERM to Mongrel at PID 29851...Done.開啟某支程式的Mongrel server:
mong.rb start money Running MONEY on port 6100...沒有特別指定程式名稱,就是開啟或關閉全部Rails程式:
mong.rb start Running MONEY on port 6100... Running RADIANT on port 6200...或是重開某支程式或全部Rails程式:
mong.rb restart money Shutdown MONEY... Sending TERM to Mongrel at PID 29851...Done. Running MONEY on port ...沒有給參數或者給help參數,則是告訴你怎麼用這支程式:
mong.rb help Usage: mong.rb [help|list|start|status|stop|restart|version] [appname]這支小程式放在Pastie,請自行取用或自行修改,有建議可以email給我。
請先在APP_DIR設定Rails程式目錄,並在APPS設定程式名稱與每支程式的對應port就可以用了。
原則上,我是在同一目錄下,放不同的Rails project,並且預設將Mongrel server開在Production模式。
Restart有點問題我知道,也還沒有時間寫Test case。
