LoginSignup
6
6

More than 5 years have passed since last update.

railsをproductionモードで起動する[Rails 5.2]

Posted at

rails5.1でproductionモード起動したんだけど、
すぐにrails5.2でやることになったので続編

<Rails5.1の時の話>
railsをproductionモードで起動する[Rails 5.1]

内容

  • rails5.2でproductionモード起動した時の手順
  • rails5.1の時と同様、railsとmysqlのコンテナをdocker-composeで起動する

手順

config/credentials.yml.encを生成する

Rails5.1では「secrets.yml.enc」を生成したが、
Rails5.2では「credentials.yml.enc」を使う

以下のコマンドで生成する
エディタにvimを指定しているが、他のエディタでも大丈夫

EDITOR="vim" rails credentials:edit

dockerコンテナにvimがない場合、コンテナ内でインストールが必要
(コンテナdownすると消えてしまうけど、一時的なので問題なし)

apt-get update
apt-get install vim

vimが起動されてsecret_key_baseを編集できるようになる
今回は編集を行わずに終了する(":q"でOK)

config/credentials.yml.encに暗号化後の内容が保存される
暗号の複合キーであるconfig/master.keyが生成される
セキュリティの観点からこのファイルはバージョン管理システムに保存しないこと
.gitignoreに自動追加されるが変更しないこと)

config/environments/production.rb を変更

productionモードに合わせて設定を変更する。

sample.ruby
config.eager_load = false
config.assets.compile = true
config.require_master_key = true
config.serve_static_files = true
config.assets.js_compressor = Uglifier.new(harmony: true)

ハマったポイントは

config.eager_load = false

この部分。
railsでプロジェクトを作成した時に設定される標準は

config.eager_load = true

となっている。
このままだと、"link_to"などでルーティングのprefix("rails routes"で表示される一番左の項目)を遷移先を指定した場合に、「そんなルーティングないんだよ!」って怒られる。
app配下をアプリケーション起動時に全部読み込んでクラスの存在確認をするみたい?
viewがroutes.rbより先に読み込まれてるんかな・・・。

railsをproductionモードで起動させる

今回はdocker-composeでコンテナ起動させているので、
docker-compose.ymlで起動モードを指定する。
以下は対象の行だけ。

docker-compose.yml
command: bundle exec unicorn -c config/unicorn.rb -E production -l 3000
environment:
  RAILS_ENV: 'production'
  RACK_ENV: 'production'

最後に

config.eager_loadがtrueの場合にエラー終了することにかなりハマった。
クラス検証の順番がイケてないのは、rails5.2だから?
うーん。深く追ったらいいのかなぁ。と思いつつ・・・おっけーかな。
そろそろ溜まってるネタを吐き出していかなければー

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6