0

几周以来,我一直在游泳数字海洋管理应用程序。到目前为止,一切都完美无缺。今天,我使用以下配置在本地环境中成功实现了带 Spaces 的 Active 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

生产.rb / 开发.rb

  config.active_storage.service = :digital_ocean

credentials.ymldigital_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 无法解密credentials.yml.enc文件,所以我尝试了3件事没有成功:

  1. 在应用程序级别添加RAILS_MASTER_KEY环境变量
  2. 通过在 DO 设置中添加构建命令,在构建阶段添加 master.keyecho "${RAILS_MASTER_KEY}" > config/master.key
  3. 通过在运行命令前添加 master.key 在运行阶段,例如echo "${RAILS_MASTER_KEY}" > config/master.key && rails server -p $PORT -e ${RAILS_ENV:-production}

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

envs:
- key: RAILS_MASTER_KEY

任何输入都无限感激

4

1 回答 1

0

Mkay,必须向数字海洋应用程序 ENV 变量添加aws-sdk-ruby gem的以下要求(由 heroku 在部署期间使用),它们是:

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

希望它可以帮助某人,因为坦率地说它并不明显......

于 2022-02-14T00:24:57.270 回答