web-dev-qa-db-ja.com

Rails本番環境のサーバーをローカルで実行しています(InvalidMessageエラー)

私はRuby 2.5.1およびRails 5.2.0。を実行しましたRails s -e production、およびこのエラーが発生します。

/home/roy/.rbenv/versions/2.5.1/lib/Ruby/gems/2.5.0/gems/activesupport-5.2.0/lib/active_support/message_encryptor.rb:206:in `rescue in_decrypt': ActiveSupport::MessageEncryptor::InvalidMessage
(ActiveSupport::MessageEncryptor::InvalidMessage)

これを正しく行うにはどうすればよいですか?


EDIT:を使用して資格情報ファイルを編集しようとすると、常に同じエラーが表示されます

EDITOR="nano --wait" bin/Rails credentials:edit

また、私はまだ本番データベースを作成していないことに気づいたので、それを使って試しました

Rails_ENV=production bundle exec Rails db:reset

(db:resetは少し冗長ですが、サーバーを作成、移行、およびシードしようとして機能するはずです)

悲しいことに、私は同じ種類のエラー(InvalidMessageエラー)を受け取ります

Unsupported Rails environment for compass
rake aborted!
ActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessage
/home/roy/apps/myappname/config/environment.rb:5:in `<main>'
/home/roy/.rbenv/versions/2.5.1/bin/bundle:23:in `load'
/home/roy/.rbenv/versions/2.5.1/bin/bundle:23:in `<main>'

Caused by:
OpenSSL::Cipher::CipherError: 
/home/roy/apps/myappname/config/environment.rb:5:in `<main>'
/home/roy/.rbenv/versions/2.5.1/bin/bundle:23:in `load'
/home/roy/.rbenv/versions/2.5.1/bin/bundle:23:in `<main>'
Tasks: TOP => db:create => db:load_config => environment
15
royketelaar

さて、ようやく機能しました。

単にmaster.keyおよびcredentials.yml.encファイルを削除してから実行しました

bin/Rails credentials:edit

新しいファイルを作成しました。その後、すべてがうまくいきました。

なぜそれが機能するのか本当に理解していません。誰もこれについて良い説明をすることができますか?

29
royketelaar

master.keycredentials.yml.encを削除するソリューションは、Rails 5.2を実行していることを示しているようです。この設定は、Rails 5.1で使用されていた同様の暗号化されたsecrets.yml.encファイルから変更されました。

目標は、秘密鍵(AWS、Railsのsecrect_key_base)をプロジェクトのコードリポジトリにコミットできるようにすることです。これらは通常、ENV変数で設定されます。現在、共同編集者は、master.keyのコンテンツを復号化、変更、または読み取るために生成されたcredentials.yml.encのみを共有する必要があります。

master.keyファイルとcredentials.yml.encファイルの両方を削除すると、Railsが新しいペアを生成し、credentials.yml.encを復号化でき、このファイルは新しい_で初期化されましたRails secret_key_baseの値はActiveSupport::MessageEncryptor::InvalidMessageを回避するために必要です。そのメッセージのソースを追跡する場合、Railsクレデンシャルの秘密鍵ベースRails.application.credentials.secret_key_baseを参照している可能性があります。

これらは、トピックに関する素晴らしい記事です。
https://medium.com/cedarcode/Rails-5-2-credentials-9b3324851336https://www.engineyard.com/blog/Rails-encrypted -credentials-on-Rails-5.2

3
gib