在我的 Rails 应用程序中,我有各种需要使用 ActiveStorage 上传的模型。某些模型需要签名的一次性 URL,而其他模型则需要不会过期的公共 URL。
我没有看到任何关于如何根据模型区分它们的选项。
ActiveStorage 是否可以做到这一点,或者对于公共和私人上传来说是全部还是全部?
我正在尝试使用 Rails Active Storage 将照片上传到 S3。
我可以附上照片:
user.photo.attach(io: File.open('spec/images/filename.png'), filename: 'filename.png')
我可以保存用户,并且可以获取照片服务 URL 并在浏览器和我的存储桶中查看它:
user.photo.service_url
但是,如果我重新启动控制台并尝试获取服务 url,我会收到以下错误:
Module::DelegationError (service_url delegated to attachment, but attachment is nil)
这是我的存储桶设置:
存储.yml:
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
region: us-east-2
bucket: <%= Rails.application.credentials.dig(:aws, :bucket) %>
Run Code Online (Sandbox Code Playgroud)
应用程序.rb:
config.active_storage.service = :amazon
用户.rb:
has_one_attached :photo
public: true我在 storage.yml 文件中使用时也遇到问题。
如果我尝试设置配置,我会收到以下错误:
ArgumentError (Cannot load `Rails.config.active_storage.service`:)
invalid configuration option `:public'
Run Code Online (Sandbox Code Playgroud)
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, …Run Code Online (Sandbox Code Playgroud)