如何在S3上访问ActiveStorage附件的URL?

时间:2018-11-05 11:01:59

标签: ruby-on-rails amazon-web-services amazon-s3 rails-activestorage

我从回形针迁移到了ActiveStorage,并且在URL中挣扎。我使用的是man 2 kill,但对我却没有用,因为每次您调用该函数时,它都会返回一个不同的URL。

我正在尝试使用service_url。在本地,它可以工作。我只需要访问Rails.application.routes.url_helpers.rails_blob_path,其中从方法调用中给了http://localhost:3000/rails/active_storage/disk/<etc>

但是如何从我的Amazon S3访问它?我启用了静态网站托管,但是如果我点击rails/active_storage/disk/<etc>,则会收到错误消息。我碰错了端点/主机吗?要获得唯一的(非动态)URL,我还应该怎么做,还有另一种最简单的方法吗?

我的storage.yml:

http://my-production-bucket.s3-website.sa-east-1.amazonaws.com/rails/active_storage/blobs/<etc>

production.rb:

amazon:
  service: S3
  access_key_id: <%= ENV['AWS_KEY'] %>
  secret_access_key: <%= ENV['AWS_SECRET'] %>
  region: 'sa-east-1'
  bucket: 'production-bucket'

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

1 个答案:

答案 0 :(得分:1)

检查文档中的service_url https://api.rubyonrails.org/v5.2.0/classes/ActiveStorage/Variant.html#method-i-service_url

  

返回服务上变体的URL。该URL旨在缩短安全性,不能直接与用户一起使用。相反,应仅将service_url作为来自稳定的,可能已通过身份验证的URL的重定向公开。将service_url隐藏在重定向后面还使您能够更改服务而无需更新所有URL。并允许将重定向到service_url的永久URL缓存在视图中。

     

使用url_for(variant)(或隐含形式,例如+ link_to变量+或+ redirect_to变量+)来获取指向ActiveStorage :: VariantsController的变量的稳定URL,该变量随后将使用此service_call方法为其重定向。

建议您在应用上实施某种代理操作。您为此操作提供固定的url,然后将请求重定向到当前的service_url。