#!/usr/bin/ruby ruby
## config/unicorn.rb
# pidファイルの場所
path_pid = "unicorn.pid"
# ログ
path_stdout_log = "log/unicorn.log"
path_stderr_log = "log/unicorn.log"
# port
port = 8080
# socket
path_socket = "/tmp/unicorn.sock"
# ===== 以下は基本的にあたる必要なし =====
# from https://github.com/defunkt/unicorn/blob/master/examples/unicorn.conf.rb
rails_root = File.expand_path('../../', __FILE__)
ENV['BUNDLE_GEMFILE'] = rails_root + "/Gemfile"
# Use at least one worker per core if you're on a dedicated server,
# more will usually help for _short_ waits on databases/caches.
worker_processes 4
# 変数が存在している場合のみ、listenする
listen path_socket, :backlog => 64 if !defined?(path_socket).empty?
listen port, :tcp_nopush => true if !defined?(port).empty?
working_directory rails_root
# 接続タイムアウト時間
timeout 30
# unicornのタイムアウト時には、リクエストのログは一切production.logには出力されない。
# なので、それを強制的に吐き出す処理を追加する
# INTシグラルでトラップするようにしている
timeout_signal :INT
after_fork do |server, worker|
trap (:INT) do
Rails.logger.error "Unicorn Timeout (trapped SIGINT)"
Rails.logger.flush
Process.kill :KILL, $$
end
end
pid path_pid
# unicornログの場所を指定する
stdout_path path_stdout_log
stderr_path path_stderr_log
# 基本的には`true`を指定する。Unicornの再起動時にダウンタイムなしで再起動が行われる。
preload_app true
# これをする理由は、
# http://techracho.bpsinc.jp/baba/2012_08_29/6001
# をみると、解りやすい
before_fork do |server, worker|
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end