小编nav*_*avi的帖子

如何设置 ActiveStorage 以允许公共和私人附件

在我的 Rails 应用程序中,我有各种需要使用 ActiveStorage 上传的模型。某些模型需要签名的一次性 URL,而其他模型则需要不会过期的公共 URL。

我没有看到任何关于如何根据模型区分它们的选项。

ActiveStorage 是否可以做到这一点,或者对于公共和私人上传来说是全部还是全部?

ruby-on-rails rails-activestorage

7
推荐指数
1
解决办法
323
查看次数

无法使用 Rails Active Storage 从 S3 检索文件

我正在尝试使用 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)

ruby-on-rails amazon-s3 rails-activestorage

5
推荐指数
1
解决办法
1774
查看次数