rails デプロイへの道:さくらVPSリベンジ編⑤(Production環境用のアプリ設定とUnicorn設定)

前回、Nginxの設定まで書いたので、rails デプロイへの道:さくらVPSリベンジ編④(デプロイ先の作成、Nginx設定)今回はその続き、Unicornに進みたいと思います。

今回からローカル環境で色々といじっていきますのでご注意を!

まずは、本番環境に向けたアプリケーションの設定変更から!

Capistrano で Rails アプリケーションの自動デプロイを参考に行っています。

スポンサーリンク
ピエロ広告ーレクタングル大

本番環境に向けたアプリケーションの改造

まずは、Gemfileに以下を追加。

gem 'rb-readline'
gem 'unicorn'

group :deployment do
 gem 'capistrano'
 gem 'capistrano-rails'
 gem 'capistrano-bundler'
 gem 'capistrano-rbenv', github: "capistrano/rbenv"
end

そして、

$ bundle install

次に config/database.yml に以下を追加。

production:
  <<: *default
  adapter: mysql2
  database: さくらVPSで作成したDBの名前(create tableしたやつです)
  username: root
  password: 自分で決めたやついれてください
  host: localhost
  encoding: utf8

ご自分の設定状況に合わせて適宜変更してください。

そして、secrets.yml の設定を行います。

$ rake secret

と打つと文字列が表示されるので、出力された文字列を保存しておき、secrets.yml の
production: -> secret_key_base: XXXX
のXXXX部分をその値で書きかえます。

最後にアセットパイプラインを通す設定を行います。

本番環境では、css,jsといったアセットはプリコンパイルした状態じゃないと読み込んでくれないので、まずプリコンパイルします。

$ rake assets:precompile RAILS_ENV=production

これで、publicディレクトリ配下にassetsフォルダができて、そのなかにプリコンパイルされたファイルが格納されます。

次に、/config/environments/production.rb を編集します。

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

config.public_file_server.enabled = true

に変更してください。

これでおそらくアセットパイプラインが本番環境でも通り、開発環境と同じようにページが見られるようになるはずです。

これでひとまずUnicorn、Capistrano以外の設定は完了です!

それでは次は残る2つのうちのひとつ、Unicornの設定です。

Unicorn設定

configフォルダの中に unicorn フォルダを作成、その中に production.rb ファイルを作成します。

ディレクトリが、config/unicorn/production.rb となればいいわけですねー

そして、production.rb ファイルの中身を下記のように編集します。

# -*- coding: utf-8 -*-
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true # 更新時ダウンタイム無し

app_path = 'アプリをデプロイするディレクトリ'
app_shared_path = "#{app_path}/shared"
working_directory "#{app_path}/current/"

listen "#{app_shared_path}/tmp/sockets/unicorn.sock"

stdout_path "#{app_shared_path}/log/unicorn.stdout.log"
stderr_path "#{app_shared_path}/log/unicorn.stderr.log"

pid "#{app_shared_path}/tmp/pids/unicorn.pid"

# ログの出力
stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

Capistrano で Rails アプリケーションの自動デプロイの中身まんまですが、一応記載しておきます。

さて、これでUnicorn の設定も完了し、残すは最後の鬼門Capistrano設定・・・

デプロイまでもう少しです・・・!

続きはこちらから。(rails デプロイへの道:さくらVPSリベンジ編⑥(Capistrano設定)

まとめ

まー色々と書いてきましたが、結局何が言いたかったかというと、

細かい

ってことです。

細かいですよね、色々な設定が。

まーサーバーみたいにUIがなく、見えない状態じゃないのが救いですが、もうちょっと簡単にしてくれると嬉しいなーと初心者的には感じるところがありますね。

他のrailsサービスはこれよりもっと複雑なんだろうなぁと思うと、先の長さを感じますね。

もっと詳しくなりたいものです。

スポンサーリンク
ピエロ広告ーレクタングル大
ピエロ広告ーレクタングル大

フォローする