2013-02-26 00:42:20 +08:00
|
|
|
# this is a trivial graceful restart on touch of tmp/restart.
|
2013-02-16 10:54:23 +08:00
|
|
|
#
|
|
|
|
# It simply drains all the requests (waits up to 4 seconds) and issues a HUP
|
|
|
|
# if you need a more sophisticated cycling restart for multiple thins it will need to be written
|
|
|
|
#
|
|
|
|
# This works fine for Discourse.org cause we host our app accross multiple machines, if you hosting
|
|
|
|
# on a single machine you have a trickier problem at hand as you need to cycle the processes in order
|
|
|
|
|
2013-02-26 00:42:20 +08:00
|
|
|
Thread.new do
|
2013-02-06 03:16:51 +08:00
|
|
|
file = "#{Rails.root}/tmp/restart"
|
2013-02-16 10:54:23 +08:00
|
|
|
old_time = File.ctime(file).to_i if File.exists? file
|
|
|
|
wait_seconds = 4
|
2013-02-06 03:16:51 +08:00
|
|
|
|
|
|
|
return if $PROGRAM_NAME !~ /thin/
|
2013-02-26 00:42:20 +08:00
|
|
|
|
2013-02-06 03:16:51 +08:00
|
|
|
while true
|
2013-02-16 10:54:23 +08:00
|
|
|
time = File.ctime(file).to_i if File.exists? file
|
2013-02-06 03:16:51 +08:00
|
|
|
|
2013-02-16 10:54:23 +08:00
|
|
|
if old_time != time
|
|
|
|
Rails.logger.info "attempting to reload #{$$} #{$PROGRAM_NAME} in #{wait_seconds} seconds"
|
2013-02-06 03:16:51 +08:00
|
|
|
$shutdown = true
|
2013-02-16 10:54:23 +08:00
|
|
|
sleep wait_seconds
|
2013-02-26 00:42:20 +08:00
|
|
|
Rails.logger.info "restarting #{$$}"
|
|
|
|
Process.kill("HUP", $$)
|
2013-02-16 10:54:23 +08:00
|
|
|
return
|
2013-02-06 03:16:51 +08:00
|
|
|
end
|
|
|
|
|
2013-02-16 10:54:23 +08:00
|
|
|
sleep 1
|
2013-02-06 03:16:51 +08:00
|
|
|
end
|
|
|
|
end
|