初めての投稿になりますので、間違いなどあればご指摘ください.
また、今回の投稿はdockerでのrails5.2の本番環境の起動の助けになればと思います。
環境
- rails ver 5.2
- docker
記事の内容
主に4つのパートに分かれています。
- railsでの本番環境にするにはどのように設定する必要があるのか
- dockerでの設定方法
- build後の起動時のエラー
- 解決方法
railsで本番環境にするにはどのように設定する必要があるのか
まず、rails5.2での本番環境で起動にするには主に以下の四つが必要になります
- database.ymlやデータベースでのproduction環境を設定する
- SECRET_KEY_BASEがcredentials.yml.encに存在するか確認
- アセットプリコンパイルを行う
- サーバーの起動
dockerでの設定方法
dockerでは起動に必要な部分を記述して起動を行います
データベース関連
database.ymlを設定やDB接続などを設定します。
production:
<<: *default
database:
username:
password:
credentials.yml.encでのSECRET_KEY_BASの確認
以下のコマンドをdockerで走らせることができれば確認できると思います
EDITOR=vim rails credentials:edit
私はdocker-composeを利用していたので以下のコマンドで確認しています
docker-compose run -e EDITOR=vim web rails credentials:edit
アセットプリコンパイル
railsのassetsファイルをプリコンパイルする必要があります
RAILS_ENV=production bundle exec rails assets:precompile
dockerに記述する部分
以下の記述を追加して起動を行いました
ENV RAILS_ENV="production"
RUN SECRET_KEY_BASE=production bundle exec rails assets:precompile
起動時の生じたエラー
さて起動をしてみると以下のエラーが出てきました。
`validate_secret_key_base': Missing `secret_key_base` for 'production' environment, set this string with `rails credentials:edit` (ArgumentError)
内容としては「secret_key_base値が見つからないため、起動できません」となっています。
そこでネット上で検索してエラーを解決しようとしていましたが解決できていませんでした。
- SECRET_KEY_BASEの値の確認
- production.rbでの設定の変更
- アセットプリコンパイルのエラーが原因なのかを調査
エラーの解決策
以下のサイトを試すと解決しました
https://qiita.com/laser_beam/items/b4abdfed09fd987308fb
具体的にはcredentials.yml.encファイルのSECRET_KEY_BASEに対してスペースを入れると解決しました。
before
secret_key_base: *****************************
after
secret_key_base: *****************************
↑スペースが入ります
原因はわかりませんが、どうしても解決しない時は試してみるといいかもしれません。
終わりに
予想外の方法で解決したので、試せることは試すことが大切だと思いました。