なぜ記事を書こうと思ったか
サービス開発中に本番環境のテストをする状況が発生し、Railsのproductionモードを起動する必要があったのですが、少し苦戦してしまった為、備忘録として残します。
関連ファイル
- config/credentials.yml.enc
- config/master.key ※
rails new
を実行した事がない場合、作成されていません。今回作成する手順も記載します。 - docker-compose.yml
- Dockerfile
- config/database.yml
- config/environments/production.rb
実行手順
※元々のconfig/credentials.yml.encに対応するmaster.keyを所持している場合、2~5の手順は飛ばして下さい。
1.ターミナルにてdocker-compose up -d
でサーバーを起動し、docker-compose exec app bash
でコンテナに入る。
2.コンテナにてEDITOR=vi rails credentials:edit
を実行し、config/master.keyを生成する。
3.config/credentials.yml.encを現在作業しているディレクトリ以外のディレクトリに移動する。
4.コンテナにてEDITOR=vi rails credentials:edit
を実行し、config/credentials.yml.encを再作成。
(今回作成したmaster.keyでは、元々のconfig/credentials.yml.encを複合することができない為、再生成)
5.再生成されたconfig/credentials.yml.encファイルがvimで開かれている為、secret_key_baseに値が入っている事を確認後、:q
でvimを閉じる。
6.docker-compose.ymlのRailsサービスのコンテナにrails s
コマンドを使用してる箇所がある為、-e production
を追記する。
7.Dockerfileにrails s
コマンドを使用してる箇所に"-e", "production"
を追記する。
8.config/database.ymlのproductionの記載をdevelopmentと同様の値にする。
※今回の記事では、テストの為の記事なので簡易にproductionモードのdatabaseの設定をしています。
9.ターミナルのコンテナをexit
し、docker-compose down
でサーバーを終了させる。
10.ターミナルでdocker-compose up -d
を行い、docker-compose exec app bash
でコンテナに再度入る。
11.config/environments/production.rbにあるconfig.cache_classesの値をfalseに変更する。
上記の手順でproductionモードで操作する事ができるようになります。
動作確認後手順(developmentモードに戻す方法)
-
今回作成したconfig/credentials.yml.encとconfig/master.keyを削除する。
-
実行手順の3で別ディレクトリに移動したcredentials.yml.encを作業しているディレクトリのconfigディレクトリ配下に戻す。
-
docker-compose.yml、Dockerfile、config/database.yml、config/environments/production.rbで変更した箇所を元の状態に戻す。
-
.DS_Storeファイルが生成されている場合は、削除する。
最後に
間違っている箇所やわからない箇所があれば、ぜひコメントしていただけると嬉しいです。
読んで頂きありがとうございました。