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

roy*_*aar 16 production ruby-on-rails

我正在运行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)
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?


编辑: 每当我尝试使用编辑凭证文件时,都会出现相同的错误

EDITOR="nano --wait" bin/rails credentials:edit
Run Code Online (Sandbox Code Playgroud)

我也意识到我还没有创建一个生产数据库,所以我尝试使用它

RAILS_ENV=production bundle exec rails db:reset
Run Code Online (Sandbox Code Playgroud)

(我知道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
Run Code Online (Sandbox Code Playgroud)

roy*_*aar 33

好吧,我终于开始工作了.

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

bin/rails credentials:edit
Run Code Online (Sandbox Code Playgroud)

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

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

  • 谢谢,但只是删除文件不是一个体面的解决方案.如果您不能丢失已保存的加密凭据,该怎么办?:) (4认同)

小智 9

看来您的解决方案是删除master.key并credentials.yml.enc表明您正在运行 Rails 5.2。此设置由secrets.yml.encRails 5.1 中使用的类似加密文件更改而来。

目标是允许将密钥(AWS、Rails' secrect_key_base)提交到项目的代码存储库。这些通常会使用 ENV 变量进行设置。现在协作者只需要共享master.key生成的解密和修改或读取credentials.yml.enc.

当您删除master.key和credentials.yml.enc文件时,rails 生成了一个新对,现在您可以解密,credentials.yml.enc并且使用新的 Railssecret_key_base值初始化该文件,以避免ActiveSupport::MessageEncryptor::InvalidMessage. 如果您追踪该消息的来源,它可能会引用 Rails 凭据密钥库:Rails.application.credentials.secret_key_base。

这些是关于该主题的好文章:
https : //medium.com/cedarcode/rails-5-2-credentials-9b3324851336 https://www.engineyard.com/blog/rails-encrypted-credentials-on-rails- 5.2