Rails5.2から secret.yml が消えて、 credentials.yml.enc で秘匿情報を管理するようなったらしい。これをうまいこと使ってやらないと、Heroku上でデプロイに失敗する要因になったりする。
参考:
Rails Encrypted Credentials on Rails 5.2
Rails5.2から追加された credentials.yml.enc のキホン
登場人物
- config/master.key
- config/credentials.yml.enc
それぞれのファイルは、 rails new されたときに自動で追加される。ただし、 master.key
は .gitignore
に追加されているのでリポジトリにコミットされない。
ハマったこと
Heroku上でapplication errorが起きた際に、master.keyの不一致によっておこっていることは、 heroku logs -tails
で確認できていたけど、なにかの拍子に消してしまっていた master.key
の再生成の方法がわからなかったため、Heroku上でrailsアプリが読み込めずにエラーになっていた。
つまり、Heroku上の環境変数に登録している master.key(RAILS_MASTER_KEY)
と、登録されている credentials.yml.enc
の内容の不一致が起きていたため、application エラーが起こっていた。
いろいろ探した結果、下記の記事にたどり着いた。
参考:Rails 5.2 で ActiveSupport::MessageEncryptor::InvalidMessage
の箇所。
素直に、既に生成されてしまっている config/credentials.yml.enc
を削除して下記を実行すれば config/credentials.yml.enc
も再生成され、かつ master.key
も作り直せたので、再生成された master.key
の内容をherokuの環境変数にセットし直して一件落着。
$ EDITOR=vim rails credentials:edit
このとき,config/master.key は,存在していなければ作られるし,存在していればそれが使われる。
とのこと。