sk

開発で得たこと

5分でUnicornを設定する。--Unicorn,Nginx

f:id:sksksksksk:20170510225653p:plain

前回は、NginxとUnicornの連携はsock名を同一にする、ということをお話しました。
それを踏まえて、進めていきます。

デモ

Git Hub

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




以上です。

ProgateやRailsチュートリアル、プログラミングスクールを通い終えたが現場のコードはかけない、

一体どうやって書くの?と思っているエンジニアのみなさんのためのチュートリアルを公開しています。

チュートリアル