reizist's blog

ウェブ

rails+unicornで特定のサーバーだけ異なる設定でunicornを起動する

production環境においてappサーバーと管理画面を同居させていた場合、unicornやnginxの設定を同一のものにしなくてはいけない制限が生まれてしまう。

今携わっているプロジェクトで、通常のappサーバーでタイムアウトを30秒に設定しているため管理画面から行う特別重い処理がタイムアウトが発生して満足に使えない状況が発生した。

このため管理画面を別サーバーに切り出す対応を行ったが、unicornの設定に少しだけ手こずったのでメモ。

task :set_unicorn_config_path do
  roles(:admin) do |host|
    set :unicorn_config_path, -> { File.join(current_path, "config", "unicorn", "admin.rb") }'
  end
end

before 'unicorn:start', :set_unicorn_config_path

対応内容は上記のみなのだけど、 capistrano3_unicornunicorn.rake における unicorn:start にフックしてproductionのみ set_unicorn_config_path タスクを実行するようにした。 role :admin に指定したインスタンスは、別のunicornの設定ファイルをつかうことができる。

unicorn:restartからもinvokeされるので、結果 deploy:restart からでも実行され、 cap deploy でも cap unicorn:restart でも上記タスクは実行される。助かる。