在本地生产中运行rails服务器(InvalidMessage错误)

时间:2018-04-30 14:31:03

标签: ruby-on-rails production

我正在运行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

5 个答案:

答案 0 :(得分:17)

好的,我终于开始工作了。

我只是删除了我的master.keycredentials.yml.enc文件,然后运行了

bin/rails credentials:edit

哪个创建了新文件。之后一切正常。

我真的不明白为什么它有效。谁能给出一个很好的解释呢?

答案 1 :(得分:2)

看来,删除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.keycredentials.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 answergib's answer的Rails 5应用程序时,我遇到了类似的问题

只需添加一些内容:

在删除credentials.yml.encmaster.key文件之后,

并运行以下命令以生成新的secret_key_basecredentials.yml.encmaster.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文件中。

那解决了这个问题。