better restarts
This commit is contained in:
parent
c03348938f
commit
acd0f29fe4
@ -1,7 +1,21 @@
|
|||||||
|
require 'erb'
|
||||||
|
|
||||||
Capistrano::Configuration.instance.load do
|
Capistrano::Configuration.instance.load do
|
||||||
set(:thin_command) { 'bundle exec thin' }
|
def self.cset(variable, *args, &block)
|
||||||
set(:thin_config_file) { 'thin.yml' }
|
set(variable, *args, &block) if !exists?(variable)
|
||||||
set(:thin_config) { "-C #{thin_config_file}" }
|
end
|
||||||
|
|
||||||
|
cset(:thin_command) { 'bundle exec thin' }
|
||||||
|
cset(:thin_config_file) { "#{current_path}/thin.yml" }
|
||||||
|
cset(:thin_config) { "-C #{thin_config_file}" }
|
||||||
|
|
||||||
|
cset(:thin_port) { 3000 }
|
||||||
|
cset(:thin_pid) { 'tmp/pids/thin.pid' }
|
||||||
|
cset(:thin_log) { 'log/thin.log' }
|
||||||
|
cset(:thin_max_conns) { 1024 }
|
||||||
|
cset(:thin_max_persistent_conns) { 512 }
|
||||||
|
|
||||||
|
cset(:thin_servers) { 4 }
|
||||||
|
|
||||||
namespace :deploy do
|
namespace :deploy do
|
||||||
task :start do
|
task :start do
|
||||||
@ -13,9 +27,45 @@ Capistrano::Configuration.instance.load do
|
|||||||
end
|
end
|
||||||
|
|
||||||
task :restart do
|
task :restart do
|
||||||
top.deploy.stop
|
run "cd #{current_path} && #{thin_command} #{thin_config} -O restart"
|
||||||
top.deploy.start
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def skel_for(file)
|
||||||
|
File.join(File.expand_path('../../skel', __FILE__), file)
|
||||||
|
end
|
||||||
|
|
||||||
|
def render_skel(file, target)
|
||||||
|
run "mkdir -p #{File.dirname(target)}"
|
||||||
|
top.upload StringIO.new(ERB.new(File.read(skel_for(file))).result(binding)), target
|
||||||
|
end
|
||||||
|
|
||||||
|
def retrieve_env
|
||||||
|
fetch(:rails_env, fetch(:rack_env, fetch(:stage, :production)))
|
||||||
|
end
|
||||||
|
|
||||||
|
namespace :thin do
|
||||||
|
task :god do
|
||||||
|
render_skel "god/thin.god.erb", "#{shared_path}/god/#{application}-thin.god"
|
||||||
|
end
|
||||||
|
|
||||||
|
task :config do
|
||||||
|
render_skel "thin/thin.yml.erb", thin_config_file
|
||||||
|
end
|
||||||
|
|
||||||
|
task :shared_pids do
|
||||||
|
run "mkdir -p #{shared_path}/pids"
|
||||||
|
end
|
||||||
|
|
||||||
|
task :rolling_restart do
|
||||||
|
run "rm -Rf #{current_path}/tmp/pids && mkdir -p #{current_path}/tmp && ln -sf #{shared_path}/pids #{current_path}/tmp/pids"
|
||||||
|
|
||||||
|
top.deploy.restart
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
after 'deploy:setup', 'thin:god', 'thin:config', 'thin:shared_pids'
|
||||||
|
|
||||||
|
after 'deploy:symlink', 'thin:rolling_restart'
|
||||||
|
end
|
||||||
|
|
||||||
|
14
skel/god/thin.god.erb
Normal file
14
skel/god/thin.god.erb
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
God.watch do |w|
|
||||||
|
w.name = "<%= application %>-thin"
|
||||||
|
w.interval = 30.seconds
|
||||||
|
|
||||||
|
pid = "<%= thin_pid %>"
|
||||||
|
|
||||||
|
template = 'bash -c "cd <%= current_dir %> && RAILS_ENV=<%= retrieve_env %> <%= thin_command %> <%= thin_config %> %s"'
|
||||||
|
|
||||||
|
w.start = template % [ 'start' ]
|
||||||
|
w.stop = template % [ 'stop' ]
|
||||||
|
|
||||||
|
w.pid_file = pid
|
||||||
|
end
|
||||||
|
|
15
skel/thin/thin.yml.erb
Normal file
15
skel/thin/thin.yml.erb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
pid: <%= thin_pid %>
|
||||||
|
address: 127.0.0.1
|
||||||
|
timeout: 30
|
||||||
|
wait: 30
|
||||||
|
port: <%= thin_port %>
|
||||||
|
log: <%= thin_log %>
|
||||||
|
max_conns: <%= thin_max_conns %>
|
||||||
|
require: []
|
||||||
|
|
||||||
|
environment: <%= retrieve_env %>
|
||||||
|
max_persistent_conns: <%= thin_max_persistent_conns %>
|
||||||
|
servers: <%= thin_servers %>
|
||||||
|
daemonize: true
|
||||||
|
chdir: <%= current_path %>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user