Control Script for Mongrel

by winson, about 1 year ago.

要是你的機器上同時跑好幾支Rails程式,而每支程式都透過proxy轉換不同port,當你常常需要開關不同程式時該怎麼辦?通常都是start或stop Mongrel server。

stop就是切換到rails project目錄,然後下mongrel_rails stop:

cd ~/projects/myrails

mongrel_rails stop
start可麻煩了,你得先去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。


  • Posted in Mongrel, Ruby, on Tuesday, June 19, 2007, at 07:18 PM.