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文章標籤
全站熱搜
