我从回形针迁移到了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") %>
答案 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。