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
arrow
arrow
    全站熱搜

    Forth 發表在 痞客邦 留言(0) 人氣()