【发布时间】: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件事没有成功:
- 在应用程序级别添加
RAILS_MASTER_KEYenv var - 在构建阶段添加 master.key,方法是在 DO 设置中添加构建命令
echo "${RAILS_MASTER_KEY}" > config/master.key - 在运行阶段添加master.key,方法是在运行命令前添加
echo "${RAILS_MASTER_KEY}" > config/master.key && 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