【问题标题】:Rails 5.2 credentials.yaml.enc and master.key not working on HerokuRails 5.2 credentials.yaml.enc 和 master.key 在 Heroku 上不起作用
【发布时间】:2018-10-26 04:21:23
【问题描述】:

我正在为一个新应用设置活动存储,但在设置我的亚马逊凭据后,我无法让该应用在生产环境中运行。

  1. 我已将我的 s3 存储桶凭据包含在我的 credentials.yaml.enc 文件中
  2. 我已将 RAILS_MASTER_KEY 环境变量添加到 Heroku。
  3. 我已经根据this在 storage.yml 文件中设置了我的 s3 存储桶。
  4. 我已将 config.active_storage.service = :amazon 行添加到我的 production.rb 中。
  5. 我已将 config.require_master_key = true 添加到我的 production.rb 中

当我尝试在 Heroku 上运行我的应用时,它无法加载。执行 $ Heroku run rails console 会给我错误:

"/app/vendor/bundle/ruby/2.3.0/gems/aws-sigv4-1.0.2/lib/aws-sigv4/signer.rb:517:in `extract_credentials_provider': Cannot load `Rails.config.active_storage.service`: (Aws::Sigv4::Errors::MissingCredentialsError)
missing credentials, provide credentials with one of the following options:
- :access_key_id and :secret_access_key
- :credentials
- :credentials_provider"

据我所知,我已经按照 Rails 5.2 的预期方式设置了凭据。我尝试了各种资产预编译的东西都无济于事。当我尝试将我的亚马逊凭据添加为环境时。 Heroku 中的变量,该应用程序在生产中运行良好。知道这里可能出了什么问题吗?

【问题讨论】:

    标签: ruby-on-rails credentials rails-activestorage ruby-on-rails-5.2


    【解决方案1】:

    可能是您忘记将config.require_master_key = true 添加到您的production.rb 吗?

    【讨论】:

    • 我的问题是我忘记在生产环境中设置 RAILS_MASTER_KEY,但是这个配置更改仍然帮助我找到了这个问题。
    • 不,我有。
    【解决方案2】:

    我以前遇到过这个问题,似乎是 Heroku 的一个错误。

    您应该通过设置选项卡上 Heroku 上的仪表板设置您的环境变量。

    然后您可以使用 ENV['NAME_OF_YOUR_VARIABLE'] 访问它

    这解决了我的问题。

    同时检查您的 Heroku 日志,向上滚动以确保所有 gem 都已安装。

    【讨论】:

    • 感谢您的回答 - 不幸的是,这是唯一对我有用的选项,使 rails 5 凭据加密系统变得毫无用处。
    • @spitz 很高兴,它有帮助。这可能是一个错误,肯定会在以后的 Rails 版本中修复。
    【解决方案3】:

    仔细检查您的config/credentials.yml.enc 文件中的密钥是否正确。我有一个键倒置-secret_key_access 而不是secret_access_key,并且遇到了同样的错误。修复 config/credentials.yml.enc 中的密钥名称已为我修复。

    在您的 rails 控制台(本地)中,运行: Rails.application.credentials.dig(:aws, :access_key_id) Rails.application.credentials.dig(:aws, :secret_access_key) 以确保它们具有价值。

    【讨论】:

      【解决方案4】:

      Welp,这太愚蠢了。谜团已揭开。我的凭据在 credentials.yaml.enc 文件中被注释掉了 - 我使用默认的 aws 示例将它们添加到文件的顶部,该示例被注释掉了。

      【讨论】:

      • this answer 看起来几乎相同时,您接受了自己的答案?
      • @StephenRauch 答案有点不同;我的凭据是正确的,只是它们被注释掉了。
      • 很公平......但我只想说有人花时间回答你的问题,在我看来(我不知道这个话题)是一个非常接近的答案。然而你没有赞成它。答案是确保您拥有正确的密钥。好吧,自从您将其注释掉后,您没有正确的密钥?所以,对我来说,这个答案非常接近。你有权接受任何你想要的答案,并以任何你想要的方式投票。但是,我建议对提供有用信息的问题的答案进行投票是好的业力,即使它们并不完全正确。干杯。
      • 我明白你的观点,只是赞成。我很感激你是社区的管家——我是新来的,还在学习行为规则。我想包括我自己的答案,以便尽可能具体地为其他人提供解决方案。
      猜你喜欢
      • 2018-09-14
      • 1970-01-01
      • 2019-06-21
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多