【问题标题】:Rails 5.2 with master.key Digital Ocean deployment: ActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessageRails 5.2 与 master.key Digital Ocean 部署:ActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessage
【发布时间】:2018-06-21 08:18:48
【问题描述】:

我已将我的 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.encmaster.key

我还在我的 ubuntu 服务器上的 /app_name/shared/config/ 上添加了 master.key 文件,还放置了一个环境变量 RAILS_MASTER_KEY。但是仍然出现此错误,我不知道我在这里缺少什么。

【问题讨论】:

  • 如果它解决了你的问题,你能不能让答案是正确的答案,@talha-junaid?否则,我愿意帮助你。
  • 你解决了吗?我真的很想帮你。
  • 你解决了吗?我真的很想帮你。谢谢
  • 谢谢@Boris,我解决了

标签: ruby-on-rails capistrano


【解决方案1】:

解决方案 A 和 B 是不同的解决方案。只需选择适合您的。

一个。从持续集成部署

1。编辑deploy.rb

set :default_env, {
  "RAILS_ENV" => "production",
  "RAILS_MASTER_KEY" => ENV["RAILS_MASTER_KEY"]
}

2。添加RAILS_MASTER_KEY作为变量

b. master.key的用法

1。编辑deploy.rb

append :linked_files, "config/master.key"

2。上传master.key:linked_files

假设我们的应用程序的根路径是/home/deploy/awesome-project。我们需要做的就是将密钥文件上传到/home/deploy/awesome-project/shared/config/master.key

【讨论】:

  • 很抱歉没有早点回复你。我已经解决了这个问题。但我不认为 default_env 是好方法,因为最终我们必须在 gitlab/github 上推送 deploy.rb 并且我们的主密钥可能会被公开,我们绝对不想这样做。不过,这会很好set :default_env, { "RAILS_MASTER_KEY" =&gt; ENV["RAILS_MASTER_KEY"] }
  • 你是对的,@talha-junaid。所以,我要改变我的答案。
  • @TalhaJunaid :你能在这里发表你的答案吗?这会很有帮助。我也遇到了此类问题,没有找到任何正确的解决方案。
  • @AkshayBorade,你能检查一下答案吗?谢谢。
  • @AkshayBorade 很抱歉没有早点回复您,上述解决方案是否解决了您的问题?
【解决方案2】:

我第一次在我的 DigitalOcean Droplet 上部署时遇到了同样的问题,每次我运行 RAILS_ENV=production cap production deploy:initial 时都无法抱怨这个错误 - ActiveSupport::MessageEncryptor::InvalidMessage

我尝试了以下所有失败的选项 -

  • 删除master.keycredential.yml.enc 文件,然后再次部署。
  • 再次添加这两个文件并进行部署。

最后一个解决方案奏效了,我刚刚添加了master.key删除 credentials.yml.enc 文件,提交并重新部署,它在不更改我的deploy.rb 文件的情况下工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多