Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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だから?
うーん。深く追ったらいいのかなぁ。と思いつつ・・・おっけーかな。
そろそろ溜まってるネタを吐き出していかなければー

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした