発生する問題
git cloneでローカルに持ってきたRailsアプリを、rails s
やrails c
で起動しようとすると以下のようなエラーが発生する。
$ rails s
=> Booting Puma
=> Rails 6.1.0 application starting in development
=> Run `bin/rails server --help` for more startup options
Exiting
/Users/jnito/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/activesupport-6.1.0/lib/active_support/message_encryptor.rb:203:in `rescue in _decrypt': ActiveSupport::MessageEncryptor::InvalidMessage (ActiveSupport::MessageEncryptor::InvalidMessage)
エラーの原因
config/master.key
の鍵が config/credentials.yml.enc
用の鍵と一致していないため、例外が発生してRailsが起動しなくなった。
もう少し詳しく
config/master.key
は通常、.gitignore
に追加してソースコード管理の対象外とするファイルである。そのため、git cloneしてもconfig/master.key
はローカルにはコピーされない。
その状態で「credentials.yml.enc
を編集したい」と思ってEDITOR="vi" bin/rails credentials:edit
のようなコマンドを実行すると、以下のようなメッセージとともに、config/master.key
が新規に作成されてしまう。(加えて、credentials.yml.enc
の編集もできない)
$ EDITOR="vi" bin/rails credentials:edit
Adding config/master.key to store the encryption key: 6eb4ad(以下略)
Save this in a password manager your team can access.
If you lose the key, no one, including you, can access anything encrypted with it.
create config/master.key
Couldn't decrypt config/credentials.yml.enc. Perhaps you passed the wrong key?
ただし、新規に作られたconfig/master.key
はgit cloneしてきたconfig/credentials.yml.enc
の鍵ではないため、Rails起動時に復号化に失敗して例外(ActiveSupport::MessageEncryptor::InvalidMessage)が発生してしまう。
対処方法
状況によって対処方法は異なる。
git cloneする前にcredentials.yml.encが使われていた場合
開発チーム内で鍵の共有方法が決められているはずなので、その運用ルールに従って適切なconfig/master.key
を自分のローカルに配置する。
credentials.yml.encが今まで使われていなかった場合
自動的に作られたconfig/master.key
を削除すればRailsが起動するようになる。
今後もcredentials.yml.enc
を使わないのであれば、config/credentials.yml.enc
ごと削除するのも一手。
逆に、これからcredentials.yml.enc
を使っていく(=自分がチーム内で最初の利用者になる)場合は、新規にconfig/credentials.yml.enc
を作り直した上でcredentials/master.key
をチーム内で適切に管理・共有する必要がある。
(ただし、どこかから適切なconfig/master.key
を入手できれば新規に作り直す必要はない)
# 既存のcredentials.yml.encを削除
$ rm config/credentials.yml.enc
# credentials.yml.encとmaster.keyを新規に作成して編集する
$ EDITOR="vi" bin/rails credentials:edit
Adding config/master.key to store the encryption key: 917c31e316061bcdd909754a56897f61
Save this in a password manager your team can access.
If you lose the key, no one, including you, can access anything encrypted with it.
create config/master.key
File encrypted and saved.
動作確認環境
- Rails 6.1.0