5分でUnicornを設定する。--Unicorn,Nginx
前回は、NginxとUnicornの連携はsock名を同一にする、ということをお話しました。
それを踏まえて、進めていきます。
デモ
Unicornのインストール
gem 'unicorn' bundle
Unicorn.rbファイルの作成
自動では作成されませんので手動で作成しましょう。
このファイルの中身がunicornの設定を行うものになります。
config/uncorn.rb
worker_processes 2 working_directory "/home/anime/deploy_sample/current" #appと同じ階層を指定 timeout 3600 listen "/var/run/unicorn/Nginxで設定した名前.sock" ★ pid "/var/run/unicorn/Nginxで設定した名前.pid" stderr_path "/home/anime/deploy_sample/current/log/unicorn.log" stdout_path "/home/anime/deploy_sample/current/log/unicorn.log" preload_app true
これだけで済みます。
特に★の部分の名前には気をつけてください。
冒頭でも説明しましたが、
ここの名前を一致させることでNginxと連携させることができます。
working_directory "/home/anime/deploy_sample/current" #appと同じ階層を指定
unicornを起動するディレクトリを指定します。
currentの下にはアプリが存在します。
デプロイ時は/home/anime/deploy_sample/の下にアプリを置いてくれと設定したことを思い出してください。
今回はこのような設定を書きました。
worker_processes 2 working_directory "/home/anime/deploy_sample/current" timeout 3600 listen "/var/run/unicorn/unicorn_deploy_sample.sock" pid "/var/run/unicorn/unicorn_deploy_sample.pid" stderr_path "/home/anime/deploy_sample/current/log/unicorn.log" stdout_path "/home/anime/deploy_sample/current/log/unicorn.log" preload_app true
さて、これをgitに入れてデプロイ、その後起動してみましょう。
$ git add . $ git commit -m ユニコーン $ git push $ cap production deploy 起動 [anime@tk2-241-30026 current]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D [anime@tk2-241-30026 current]$
できた!と、思ったら、production環境のシークレットキーを設定していなく、HTTP500エラーです。
シークレットキーの作成
$ bundle exec rake secret
生成されたキーをsecret.ymlに設定します。
config/secret.yml
production: secret_key_base: 生成されたキー
もう一度デプロイして結果を確認します。
デモ
できました。
再起動した時に以下のエラーが出ますが、これはすでにアプリケーションサーバが起動している為です。
master failed to start, check stderr log for details
ですので、以下のようにプロセスを殺して起動してください。
プロセスIDはその度に異なるので、適切に処置してください。
[anime@tk2-241-30026 current]$ ps -ef | grep unicorn anime 22414 1 0 00:18 ? 00:00:01 unicorn_rails master -c config/unicorn.rb -E production -D anime 22417 22414 0 00:18 ? 00:00:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D anime 22420 22414 0 00:18 ? 00:00:00 unicorn_rails worker[1] -c config/unicorn.rb -E production -D [anime@tk2-241-30026 current]$ kill -QUIT 22414 [anime@tk2-241-30026 current]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
以上です。