【问题标题】:Rails Digital ocean Managed App `extract_credentials_provider': missing credentialsRails 数字海洋托管应用程序“extract_credentials_provider”:缺少凭据
【发布时间】:2022-02-14 08:24:57
【问题描述】:

几周以来,我一直在玩数字海洋管理的应用程序。到目前为止,一切都完美无缺。今天,我使用以下配置在本地环境中成功实现了带 Spaces 的 Active Storage:

storage.yml

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

digital_ocean:
  service: S3
  endpoint: https://ams3.digitaloceanspaces.com
  access_key_id: <%= Rails.application.credentials.dig(:digital_ocean, :access_key_id) %>
  secret_access_key: <%= Rails.application.credentials.dig(:digital_ocean, :secret_access_key) %>
  bucket: my-servername
  region: unused

production.rb / development.rb

  config.active_storage.service = :digital_ocean

credentials.yml 中的digital_ocean 配置通过EDITOR=VI rails credentials:edit 看起来像这样(在被加密之前)

digital_ocean:
  access_key_id: the_key
  secret_access_key: the_secret
...

在本地,一切都像一个魅力,所以我假设这不是关于配置本身,而是更多关于 DO 托管应用程序中的部署阶段。

数字海洋部署:

[2022-02-13 23:34:45] /layers/heroku_ruby/gems/vendor/bundle/ruby/3.1.0/gems/aws-sigv4-1.4.0/lib/aws-sigv4/signer.rb:627:in `extract_credentials_provider': missing credentials, provide credentials with one of the following options: (Aws::Sigv4::Errors::MissingCredentialsError)
[2022-02-13 23:34:45]   - :access_key_id and :secret_access_key
[2022-02-13 23:34:45]   - :credentials
[2022-02-13 23:34:45]   - :credentials_provider

由于整个 S3/Space 事物通过相同的 :access_key_id / :secret_access_key 机制在本地完美运行,并且我可以从 localhost 与空间进行交互,我假设这个问题发生在部署期间,因为 rails 无法解密 @987654327 @文件,所以我尝试了3件事没有成功:

  1. 在应用程序级别添加 RAILS_MASTER_KEY env var
  2. 在构建阶段添加 master.key,方法是在 DO 设置中添加构建命令 echo "${RAILS_MASTER_KEY}" &gt; config/master.key
  3. 在运行阶段添加master.key,方法是在运行命令前添加echo "${RAILS_MASTER_KEY}" &gt; config/master.key &amp;&amp; rails server -p $PORT -e ${RAILS_ENV:-production}

我已经浏览了几个小时的互联网,即使我按照所有步骤操作,我也无法理解为什么它会出错。我注意到RAILS_MASTER_KEY Env var 似乎不可用,因为当我在控制台中运行 echo $RAILS_MASTER_KEY 时它没有出现,即使它似乎是在 App Spec env vars 中设置的:

envs:
- key: RAILS_MASTER_KEY

任何输入都会受到无限赞赏

【问题讨论】:

    标签: ruby-on-rails digital-ocean digital-ocean-spaces digital-ocean-apps


    【解决方案1】:

    好吧,必须将aws-sdk-ruby gem(heroku 在部署期间使用)的以下要求添加到数字海洋应用 ENV 变量中,它们是:

    AWS_ACCESS_KEY_ID=<your DO space access key id>
    AWS_SECRET_ACCESS_KEY= <your DO space secret access key>
    

    希望它对某人有所帮助,因为坦率地说它并不明显......

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多