Railsでproductionモードで起動するときの作業

やるべきことまとめ

  • productionモード用の設定
  • productionモード用DBのセットアップ
  • アセットのプリコンパイル
  • SECRET_KEY_BASEの設定
  • 環境変数を指定してサービス起動

productionモード用の設定

最低限、DB接続先(config/database.yml)と、migrateは必要。

 production:
  <<: *default
  adapter: mysql2
  encoding: utf8
  reconnect: false
  pool: 5
  host: <DBのIPアドレス、ホスト名など> #AWSなら、内部ネットワークのIPアドレスで指定するとレスポンス面もトラフィック面も効率が良い。
  database: <データベース名>
  username: <%= ENV['RAILS_DATABASE_USER'] %> #環境変数に外出しが良い。
  password: <%= ENV['RAILS_DATABASE_PASSWORD'] %> #環境変数に外出しが良い。 

productionモード用DBのセットアップ

rake db:migrate RAILS_ENV=production

アセットコンパイル

rake assets:precompile  RAILS_ENV=production

SECRET_KEY_BASEの設定

config/secrets.ymlがこうなっていることを、念のため確認する。
developmentモード、testモードはsecrets.ymlに直書きしているが、productionモードはプロジェクトから外出しする前提になっている。
Gitなどソース共有時にproductionモード用の値を共有・公開してしまわないようにという理由らしい。

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

環境変数を指定してサービス起動

#環境変数にSECRET_KEY_BASE、RAILS_ENVを設定して、サービス開始
#config/puma.rbでデーモン化ONを入れたり外したりすれば、デーモン化なのかコンソールでログをモニタリングしたりを切り替えられる。
export SECRET_KEY_BASE=`rake secret`;export RAILS_ENV=production;pumactl start

環境変数を指定してサービス起動するように自動起動スクリプトに反映する。/etc/init.d/puma

 #変更前
  sh -c "$PUMA_BIN start"
 #変更後
  sh -c "export SECRET_KEY_BASE=`rake secret`;export RAILS_ENV=production; $PUMA_BIN start"