プロジェクト

全般

プロフィール

RedmineをCentOS 6上で動かすーUnicornとNginx編 » unicorn.rb

Unicorn 5.0+対応(tmpメソッドが無くなった対応) - 高橋 徹, 2016/06/22 15:30

 
# -*- coding: utf-8 -*-
# Unicorn設定ファイル

# ワーカープロセスの数。1ワーカーで1つのリクエストを処理する。
# ワーカー数が上限に達すると、先行するリクエストが完了するまで待ちとなる。
worker_processes 2

# リクエスト待ち受け口、TCPとUNIXドメインとが指定可能。
listen "/tmp/unicorn_redmine.sock", :backlog => 32
listen 8282, :tcp_nopush => true

# タイムアウト秒数
timeout 30

# 稼働中のプロセスのPIDを書いておくファイル。
pid "tmp/pids/unicorn.pid"

# デーモンで起動すると標準出力/標準エラー出力が/dev/nullになるので、
# それぞれログファイルに出力する。
stderr_path 'log/unicorn.stderr.log'
stdout_path 'log/unicorn.stdout.log'

# マスタープロセス起動時にアプリケーションをロードする(true時)。
# ワーカープロセス側でロードをしないのでメモリ消費、応答性良好になる。
# ただし、ソケットはfork後に開きなおす必要あり。
# HUPシグナルでアプリケーションはロードされない。
preload_app true

# unicornと同一ホスト上のクライアントとのコネクション限定で、維持されているかを
# アプリケーションを呼ぶ前にチェックする。
check_client_connection false

before_fork do |server, worker|
# Railsでpreload_appをtrueにしているときは強く推奨
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
# Railsでpreload_appをtrueにしているときは必須
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection

begin
uid, gid = Process.euid, Process.egid
user, group = "redmine", "redmine"
ENV['HOME'] = "/home/redmine"
target_uid = Etc.getpwnam(user).uid
target_gid = Etc.getgrnam(group).gid
if uid != target_uid or gid != target.gid
Process.initgroups(user, target_gid)
Process::GID.change_privilege(target_gid)
Process::UID.change_privilege(target_uid)
end
rescue => e
if ENV['RAILS_ENV'] == 'development'
STDERR.puts "could not change user, oh well"
else
STDERR.puts "could not change user, oh well"
raise e
end
end
end

(5-5/5)