# config/unicorn.rb worker_processes Integer(ENV["WEB_CONCURRENCY"] || 5) timeout 60 preload_app true listen "/var/run/fetsite.sock" stderr_path "/var/log/unicorn.log" stdout_path "/var/log/unicorn.log" 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 begin uid, gid = Process.euid, Process.egid user, group = 'fetsite', 'nogroup' target_uid = Etc.getpwnam(user).uid target_gid = Etc.getgrnam(group).gid worker.tmp.chown(target_uid, target_gid) if uid != target_uid || gid != target_gid Process.initgroups(user, target_gid) Process::GID.change_privilege(target_gid) Process::UID.change_privilege(target_uid) end rescue => e if RAILS_ENV == 'development' STDERR.puts "couldn't change user, oh well" else raise e end end end