我正在运行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)
我该如何正确地做到这一点?
修改 每当我尝试使用
编辑凭证文件时,都会出现相同的错误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
答案 0 :(得分:17)
好的,我终于开始工作了。
我只是删除了我的master.key
和credentials.yml.enc
文件,然后运行了
bin/rails credentials:edit
哪个创建了新文件。之后一切正常。
我真的不明白为什么它有效。谁能给出一个很好的解释呢?
答案 1 :(得分:2)
看来,删除master.key
和credentials.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 {{1 }}值,以避免使用secret_key_base
。如果您跟踪该消息的来源,则可能引用了Rails凭证秘密密钥库:ActiveSupport::MessageEncryptor::InvalidMessage
。
这些是有关以下主题的不错的文章:
https://medium.com/cedarcode/rails-5-2-credentials-9b3324851336
https://www.engineyard.com/blog/rails-encrypted-credentials-on-rails-5.2
答案 2 :(得分:2)
对于Rails 6,我有一个多环境凭据设置。
一个用于开发,登台和生产的软件。
master.key适用于主credentials.yml
文件
其他环境都有自己的密钥,因此在暂存时,我们使用production.key代替了heroku上的RAILS_MASTER_KEY
配置环境,并为我修复了该问题。
答案 3 :(得分:0)
在生产环境中使用royketelaar's answer和gib's answer的Rails 5应用程序时,我遇到了类似的问题
只需添加一些内容:
在删除credentials.yml.enc
和master.key
文件之后,
并运行以下命令以生成新的secret_key_base
,credentials.yml.enc
和master.key
文件(我的编辑器是VS Code,而不是Nano):
EDITOR="code --wait" bin/rails credentials:edit
确保在config/environments/production.rb
文件中取消注释以下配置:
config.require_master_key = true
对于您的生产环境,由于不建议将包含用于解密master.key
的{{1}}的{{1}}文件提交给版本系统控制,请保存{{1 }}在master key
环境变量中,并使用figaro gem。
仅此而已。
我希望这会有所帮助
答案 4 :(得分:0)
您需要向项目负责人/团队负责人/同事要求主密钥。
使用诸如63y4gh47373h3733jj474这样的长键,将其复制并粘贴到config文件夹下的master.key文件中。
那解决了这个问题。