运行 rails 本地生产服务器(InvalidMessage 错误)
Running a rails server in production locally (InvalidMessage error)
我是 运行 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
好的,我终于成功了。
我只是删除了 master.key
和 credentials.yml.enc
文件,然后 运行
bin/rails credentials:edit
创建了新文件。之后一切正常。
虽然我不太明白它为什么有效。谁能对此给出一个很好的解释?
看来您删除 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 secret_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
我在生产中使用 Rails 5 应用程序时遇到了类似的问题, and
补充几点:
删除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
对于您的生产环境,由于包含用于解密credentials.yml.enc
的master key
的master.key
文件不建议提交到版本系统控制,保存master key
在 RAILS_MASTER_KEY
环境变量中使用 figaro gem.
就这些了。
希望对您有所帮助
您需要向您的项目负责人/团队负责人/同事索取万能钥匙。
使用像 63y4gh47373h3733jj474 这样的长密钥,将其复制并粘贴到 config 文件夹下的 master.key 文件中。
那就解决问题了。
对于 Rails6,我有一个多环境凭据设置。
一个用于开发、暂存和生产。
master.key 适用于主 credentials.yml
文件
其他环境有自己的密钥,所以为了暂存,我们使用 production.key 代替 heroku 上的 RAILS_MASTER_KEY
配置环境,并为我修复了它。
我是 运行 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
好的,我终于成功了。
我只是删除了 master.key
和 credentials.yml.enc
文件,然后 运行
bin/rails credentials:edit
创建了新文件。之后一切正常。
虽然我不太明白它为什么有效。谁能对此给出一个很好的解释?
看来您删除 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 secret_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
我在生产中使用 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
对于您的生产环境,由于包含用于解密credentials.yml.enc
的master key
的master.key
文件不建议提交到版本系统控制,保存master key
在 RAILS_MASTER_KEY
环境变量中使用 figaro gem.
就这些了。
希望对您有所帮助
您需要向您的项目负责人/团队负责人/同事索取万能钥匙。
使用像 63y4gh47373h3733jj474 这样的长密钥,将其复制并粘贴到 config 文件夹下的 master.key 文件中。
那就解决问题了。
对于 Rails6,我有一个多环境凭据设置。
一个用于开发、暂存和生产。
master.key 适用于主 credentials.yml
文件
其他环境有自己的密钥,所以为了暂存,我们使用 production.key 代替 heroku 上的 RAILS_MASTER_KEY
配置环境,并为我修复了它。