【发布时间】:2021-08-25 22:37:12
【问题描述】:
我最近利用 Rails 6.1 支持在一个应用中使用多个不同的 Active Storage 服务,在一个关联的基础上:
class MyClass < ApplicationRecord
has_many_attached :cool_documents
has_many_attached :even_cooler_documents, service: :my_new_service
end
storage.yml 看起来像这样:
local:
service: Disk
root: <%= Rails.root.join("storage") %>
my_first_service:
service: S3
access_key_id: <%= ENV['AWS_ACCESS_KEY'] %>
secret_access_key: <%= ENV['AWS_SECRET_KEY'] %>
region: us-east-1
bucket: <%= ENV['MY_FIRST_BUCKET'] %>
my_new_service:
service: S3
access_key_id: <%= ENV['AWS_ACCESS_KEY'] %>
secret_access_key: <%= ENV['AWS_SECRET_KEY'] %>
region: us-east-1
bucket: <%= ENV['MY_NEW_BUCKET'] %>
但是,我们有一个开发人员的生活质量问题——我们真的很喜欢为本地开发人员提供一种回退机制,它说“你有 AWS 存储配置所需的 ENV 变量吗?如果有,让我们使用它。如果没有,让我们使用本地存储。”这体现在我们development.rb 配置文件中的一些代码中,如下所示:
config.active_storage.service = if ENV["AWS_ACCESS_KEY"].present? && ENV["AWS_SECRET_KEY"].present?
:my_first_service
else
:local
end
当应用程序只有一个相关的 Active Storage 服务时,这非常有效——默认值。但是,my_new_service 的配置打破了这一点——您必须拥有正确的 ENV 配置才能配置my_new_service,否则应用程序在无法配置服务时会抛出错误。此外,到目前为止,我无法弄清楚如何优雅地完成这项工作并以我想要的方式“热交换”配置。有没有人对我们如何配置它有任何想法?
【问题讨论】:
标签: ruby-on-rails ruby rails-activestorage