【Rails】ActiveSupport::MessageEncryptor::InvalidMessage


理解してないのに安易にコマンドを叩くなって話

本番環境にて環境変数を設定しようとあれこれしていると...

ターミナル
$ rails s
・
・
・
/Users/hogetaro/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-5.2.3/lib/active_support/message_encryptor.rb:206:in `rescue in _decrypt': ActiveSupport::MessageEncryptor::InvalidMessage (ActiveSupport::MessageEncryptor::InvalidMessage)

ActiveSupport::MessageEncryptor::InvalidMessage見た事ないエラーでました...

参考記事

Rails 5.2 で ActiveSupport::MessageEncryptor::InvalidMessage
https://qiita.com/scivola/items/cc06ddbfd94d3118f693
Rails5.2から追加された credentials.yml.enc のキホン
https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39

何が起きたのか

rails credentials:editコマンド叩いたら勝手に鍵を生成して config/master.key に保存された...

新しく生成された鍵は既存のconfig/credentials.yml.encの復号には使えない。

参考記事によると、master.keyrails newした際に作成されます。そしてこのmaster.keyに記載されているキーを利用してcredentials.yml.encは暗号化・復号されているようだ。

このままでは、違う鍵を持っている私はcredentials.yml.encという名前の扉を開く事ができないらしい...

なぜこのコマンドを使ったかというと、よくコマンドの意味を理解せずにやってみたら何か変化するかも的な感じでコマンド使いました...反省

解決方法

credentials.yml.encファイルを削除してrails credentials:editコマンドもう一度

ただし開発初期段階rails newした時に作成されるconfig/credentials.yml.encと内容に違いがなく問題にならない場合に限る

今の自分の状況ではこの方法はマズいような気が。既にデプロイされているのでawsのsecret_access_keyやら設定している。

やり方

credentials.yml.encを右クリックでもいいのでゴミ箱へ

ターミナル
$ sudo EDITOR=vim rails credentials:edit
New credentials encrypted and saved.

これでconfig/master.keyは存在してなければ作られる。存在していればそれが使われる。あとcredentials.yml.encが新しく作り直されます。rails sできるようになります。

新しい鍵と一緒に新しい扉に取り替える感じですかね
既存の鍵に合う錠前に付け替える感じですかね

チームメンバーにキーを教えてもらう

config/master.key.gitignoreによってgit管理させないようにしている。なのでgithubからcloneしてもmaster.keyは分からないという事なので自分でrails newした環境のmaster.keyの中身が分からない場合は教えてもらうしかない。

扉を取り替えるのは大変なので家族の鍵借ります=>合鍵作ります

結論

つまらぬエラーで時間を無駄にしないように、よくよく調べて理解してからコマンド使います。

間違いがあったらご指摘ください。

終わり