ref: master
config/production.pill
require 'rubygems'
require 'bluepill'
require 'yaml'
RailsRoot = File.expand_path "#{File.dirname __FILE__}/../"
ConfigPath = "#{RailsRoot}/config"
LogPath = "#{RailsRoot}/log"
PidDir = 'tmp/pids'
PidPath = "#{RailsRoot}/#{PidDir}"
def env
ENV['RAILS_ENV'] || 'production'
end
def cmd_wrap
"bundle exec"
end
def commons process
process.start_grace_time = 10.seconds
process.stop_grace_time = 10.seconds
end
def monitor_thin
file = "#{ConfigPath}/thin.yml"
config = YAML.load_file file rescue {}
num_servers = config["servers"] || 1
start_port = config['port'] || 3000
(0...num_servers).each do |i|
port = start_port + i
$app.process "thin-#{port}" do |process|
process.group = 'thin'
commons process
pid_path = "#{config['chdir'] || RailsRoot}/#{config['pid'] || "#{PidDir}/thin.pid"}"
ext = File.extname(pid_path)
process.pid_file pid_path.gsub(/#{ext}$/, ".#{port}#{ext}")
process.uid config['user'] if config['user']
process.gid config['group'] if config['group']
%w[start stop restart].each do |command|
process.send "#{command}_command=", "#{cmd_wrap} thin #{command} -C #{file} -o #{port}"
end
timeout = config['timeout']
process.stop_grace = (timeout * (w.stop_grace+3)).seconds if timeout > 0
end
end
end
def monitor_solr
file = "#{RailsRoot}/plugins/solr/config/solr.yml"
return puts "Solr config file doesn't exist. Ignoring solr." unless File.exists? file
config = YAML.load_file file
$app.process 'solr' do |process|
commons process
process.pid_file = "#{PidPath}/#{process.name}.#{env}.pid"
%w[start stop restart].each do |command|
process.send "#{command}_command=", "#{cmd_wrap} rake solr:#{command}"
end
end
end
def monitor_feed_updater
$app.process 'feed-updater' do |process|
commons process
process.pid_file = "#{PidPath}/#{process.name}.#{env}.pid"
%w[start stop].each do |command|
process.send "#{command}_command=", "#{cmd_wrap} script/#{process.name} -i #{env} #{command}"
end
end
end
def monitor_delayed_job
$app.process 'delayed_job' do |process|
commons process
process.pid_file = "#{PidPath}/#{process.name}.#{env}.pid"
%w[start stop].each do |command|
process.send "#{command}_command=", "#{cmd_wrap} script/#{process.name} -i #{env} #{command}"
end
end
end
Bluepill.application 'noosfero', :log_file => "#{LogPath}/bluepill.log" do |app|
$app = app
app.working_dir = RailsRoot
app.environment = { 'RAILS_ENV' => env }
monitor_thin
monitor_solr
monitor_feed_updater
monitor_delayed_job
end