123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- require "net/http"
- worker_processes Integer(ENV["WEB_CONCURRENCY"] || 2)
- timeout 15
- preload_app true
- # Note that this will only work correctly when running Heroku with ONE web worker.
- # If you want to run more than one, use the standard Huginn Procfile instead, with separate web and job entries.
- # You'll need to set the Heroku config variable PROCFILE_PATH to 'Procfile'.
- Thread.new do
- worker_pid = nil
- while true
- if worker_pid.nil?
- worker_pid = spawn("bundle exec rails runner bin/threaded.rb")
- puts "New threaded worker PID: #{worker_pid}"
- end
- sleep 45
- if ENV['DOMAIN']
- force_ssl = ENV['FORCE_SSL'] == 'true'
- Net::HTTP.get_response(URI((force_ssl ? "https://" : "http://") + ENV['DOMAIN']))
- end
- begin
- Process.getpgid worker_pid
- rescue Errno::ESRCH
- # No longer running
- worker_pid = nil
- end
- end
- end
- before_fork do |server, worker|
- Signal.trap 'TERM' do
- puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
- Process.kill 'QUIT', Process.pid
- end
- defined?(ActiveRecord::Base) and
- ActiveRecord::Base.connection.disconnect!
- end
- after_fork do |server, worker|
- Signal.trap 'TERM' do
- puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
- end
- defined?(ActiveRecord::Base) and
- ActiveRecord::Base.establish_connection
- end
|