ruby-on-rails - Rails 5.2 与 master.key Digital Ocean 部署:ActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessage
问题描述
我已将我的 Ruby on Rails 应用程序从 Rails 5.1.2 迁移到 Rails 5.2.0 以使用加密的机密。应用程序已成功部署到 Digital Ocean Ubuntu Server。但是当我进入浏览器访问时,它会显示以下日志。
ActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessage
/home/deploy/apps/GeekyCricket/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.0/lib/active_support/message_encryptor.rb:206:in `rescue in _decrypt'
/home/deploy/apps/GeekyCricket/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.0/lib/active_support/message_encryptor.rb:184:in `_decrypt'
/home/deploy/apps/GeekyCricket/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.0/lib/active_support/message_encryptor.rb:157:in `decrypt_and_verify'
/home/deploy/apps/GeekyCricket/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.0/lib/active_support/messages/rotator.rb:21:in `decrypt_and_verify'
/home/deploy/apps/GeekyCricket/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.0/lib/active_support/encrypted_file.rb:79:in `decrypt'
/home/deploy/apps/GeekyCricket/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.0/lib/active_support/encrypted_file.rb:42:in `read'
/home/deploy/apps/GeekyCricket/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.0/lib/active_support/encrypted_configuration.rb:21:in `read'
/home/deploy/apps/GeekyCricket/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.0/lib/active_support/encrypted_configuration.rb:33:in `config'
/home/deploy/apps/GeekyCricket/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.0/lib/active_support/encrypted_configuration.rb:38:in `options'
/home/deploy/apps/GeekyCricket/shared/bundle/ruby/2.4.0/gems/activesupport-5.2.0/lib/active_support/core_ext/module/delegation.rb:271:in `method_missing'
(erb):12:in `<main>'
我使用 , 添加了加密的秘密rails credentials:edit
,它创建config/credentials.yml.enc
和master.key
.
我还在我的 ubuntu 服务器上添加了 master.key 文件/app_name/shared/config/
,还放置了一个 env 变量RAILS_MASTER_KEY
。但是仍然收到此错误,我不知道我在这里缺少什么。
解决方案
解决方案 A 和 B 是不同的解决方案。只需选择对您有好处的。
一个。从持续集成部署
1. 编辑deploy.rb
set :default_env, {
"RAILS_ENV" => "production",
"RAILS_MASTER_KEY" => ENV["RAILS_MASTER_KEY"]
}
2.添加RAILS_MASTER_KEY
为变量
湾。的使用master.key
1. 编辑deploy.rb
append :linked_files, "config/master.key"
master.key
2.上传:linked_files
假设我们的应用程序的根路径是/home/deploy/awesome-project
. 我们需要做的就是将密钥文件上传到/home/deploy/awesome-project/shared/config/master.key
.
推荐阅读
- ruby-on-rails - 轨道一对多关联未在数据库上保存记录
- javascript - 当我在可观察对象的管道中绘制地图时,对象的类型是什么?
- python - Python Pyglet 鼠标事件不调用 on_draw() 也不在窗口中进行更改
- apache-drill - Apache Drill - MSSQL 插件错误:未知 SQL 类型 -155
- vsphere - 我可以在电报中将 vsphere 度量作为标签和字段吗?
- html - 使用 index 将 CSS 背景图像与 line-item 匹配
- python - 将不同 Python 模块中的函数导入 Apache Spark
- scheme - 在球拍方案或其他方案中解码十六进制格式字符串的惯用方法
- docker - 无法在 docker 图像中看到图像名称和标签
- azure - 将数据插入 cosmosdb 时,有没有办法增加请求大小限制?