close
Mongrel Cluster是一支小程式,用來簡化運行多個Mongrel時的設定、啟動及停止。安裝Mongrel Cluster:
gem install mongrel_cluster -y
因為我有數支rails程式,所以把Mongrel Cluster設定檔集中管理,儲存在/home/forth/etc/mongrel目錄中,另外,寫了一支小程式偷懶,不用每次都敲那麼長的命令,只要定義rails程式的名字、起始連接埠、行程數、目錄:
site :myapp, 8000, 4, '/home/www/myapp'
再執行簡單的命令就能控制rails程式:
railsd config_cluster # 產生設定檔供Mongrel Cluster使用 railsd start_cluster # 透過Mongrel Cluster啟動rails程式 railsd stop_cluster # 停止rails程式
Mongrel Cluster提供了一支開機啟動程式:
/usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-0.2.0/resources/mongrel_cluster
把它複製到/usr/local/etc/rc.d目錄,再修改內容,將CONF_DIR設成/home/forth/etc/mongrel,之後就會在開機時啟動所有rails程式。 偷懶小程式railsd:
#!/usr/local/bin/ruby @sites = {} def site(name, port, servers, dir) @sites[name] = {:port => port, :servers => servers, :dir => dir} end site :zbwei_typo, 8001, 4, '/home/forth/www/zbwei.net/typo' site :zbwei_link, 8021, 4, '/home/forth/www/zbwei.net/app' site :zbwei_joket, 8041, 4, '/home/forth/www/zbwei.net/joket' site :amersen, 8061, 4, '/home/forth/www/zbwei.net/amersen' site :cert, 8051, 4, '/home/forth/www/cert.tw/cert' site :bento, 8071, 4, '/home/forth/www/bento.tw' @mongrel_bin = '/usr/local/bin/mongrel_rails' @config_dir = '/home/forth/etc/mongrel' @address = '127.0.0.1' @user = 'www' @group = 'www' @rails_env = 'production' def start @sites.each do |name, site| puts "Starting #{name} ..." system "#{@mongrel_bin} start -d -e #{@rails_env} --user #{@user} --group #{@group} -a #{@address} -p #{site[:port]} -c #{site[:dir]}" end end def stop @sites.each do |name, site| puts "Stopping #{name} ..." system "#{@mongrel_bin} stop -c #{site[:dir]}" end end def config_cluster @sites.each do |name, site| puts "Configuring #{name} ..." system "#{@mongrel_bin} cluster::configure -C #{@config_dir}/#{name}.yml -e #{@rails_env} --user #{@user} --group #{@group} -a #{@address} -p #{site[:port]} -N #{site[:servers]} -c #{site[:dir]}" end end def start_cluster @sites.each do |name, site| puts "Starting #{name} cluster ..." system "#{@mongrel_bin} cluster::start -C #{@config_dir}/#{name}.yml" end end def stop_cluster @sites.each do |name, site| puts "Stopping #{name} cluster ..." system "#{@mongrel_bin} cluster::stop -C #{@config_dir}/#{name}.yml" end end def method_missing(method_id) puts 'Options: start | stop | start_cluster | stop_cluster | config_cluster' end send ARGV[0] || :help
全站熱搜