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_unicorn
の unicorn.rake
における unicorn:start
にフックしてproductionのみ set_unicorn_config_path
タスクを実行するようにした。 role :admin
に指定したインスタンスは、別のunicornの設定ファイルをつかうことができる。
unicorn:restartからもinvokeされるので、結果 deploy:restart
からでも実行され、
cap deploy
でも cap unicorn:restart
でも上記タスクは実行される。助かる。