この記事で書くこと
久しぶりにHerokuでRailsアプリケーションを作成して公開しようとしたら、いくつかの躓きがあったのでその備忘録。
具体的にいうと、credentialsの扱いについて。
https://railsguides.jp/6_0_release_notes.html#railties-%E4%B8%BB%E3%81%AA%E5%A4%89%E6%9B%B4
環境
Rails 6.0.3.2
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux]
起きたこと
①Rails.application.credentials
を読み込もうとしてる箇所でデプロイ中に参照エラーが発生してデプロイが失敗する。
② herokuの公式ドキュメントを見ても、情報が見当たらなかったので、調べていると HerokuにRailsアプリをデプロイする という記事を見つけたので、読んでみる。この環境変数が何を指してるのか解らなかったので、理解するために、もう少し調べると、 Rails5.2から追加された credentials.yml.enc のキホン という記事を見つけ、 config/master.key
が共有されない環境では、この環境変数を設定することで、暗号化されたファイルを解読することができることがわかりました。参考にさせていただいた記事の皆さんありがとうございます!
というわけで、
③ config/master.key
の内容をherokuの環境変数に設定する。
heroku config:set RAILS_MASTER_KEY=`cat config/master.key`
を実行しました。
③再度デプロイするも、失敗。今度は、 ActiveSupport::MessageEncryptor::InvalidMessage
が発生していることが原因。
④自分の環境を見直すと、 以下の内容でした。
config/master.key
config/credentials/production.key
config/credentials/development.key
config/credentials.yml.enc
config/credentials/production.yml.enc
config/credentials/development.yml.enc
自分が環境変数でセットした master.key
で開錠できるのは、 config/credentials.yml.enc
です。
でも、自分は config/credentials/production.yml.enc
を作成していたので、そちらが読み込まれて、 master.key
で解錠できずにエラーが発生しているのではないかと気付きました。
④正しい鍵の内容をherokuの環境変数に設定し直す。
heroku config:set RAILS_MASTER_KEY=`cat config/credentials/production.key`
⑤設定し直すと、無事デプロイできました。