将S3与Active Storage一起使用时,“请求已过期”

Man*_*rio 3 ruby-on-rails amazon-s3 ruby-on-rails-5 rails-activestorage

我是第一次使用ActiveStorage。在开发过程中一切正常,但在生产中(Heroku),我的图像无故消失了。

他们第一次显示正常,但现在没有图像显示。在控制台中,我可以看到此错误:

GET https://XXX.s3.amazonaws.com/variants/Q7MZrLyoKKmQFFwMMw9tQhPW/XXX 403 (Forbidden)
Run Code Online (Sandbox Code Playgroud)

如果我尝试直接访问该URL,则会得到一个XML

<Error>
  <Code>AccessDenied</Code>
  <Message>Request has expired</Message>
  <X-Amz-Expires>300</X-Amz-Expires>
  <Expires>2018-07-24T13:48:25Z</Expires>
  <ServerTime>2018-07-24T15:25:37Z</ServerTime>
  <RequestId>291D41FAC6708334</RequestId>      
  <HostId>lEVGuwA6Hvlm/i40PeXaje9SEBYks9+uk6DvBs=</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)

这就是我的看法

<div class="cover" style="background-image: url('<%= rails_representation_path(experience.thumbnail) %>')"></div>
Run Code Online (Sandbox Code Playgroud)

这就是我在模型中所拥有的

def thumbnail
  self.cover.variant(resize: "300x300").processed
end
Run Code Online (Sandbox Code Playgroud)

简而言之,我不希望图像过期,而是一直在那里。

谢谢

Din*_*tih 5

ActiveStorage不支持非过期链接。它使用到期链接(私有),并仅支持在服务上以私有形式上载文件。

这对我来说也是一个问题,仅针对S3 做了2个补丁(警告),一个简单的〜30行覆盖了ActiveStorage以仅与未到期的(公共)链接一起使用,另一个对a_add_attached和has_many_attached方法添加了acl选项。

希望能帮助到你。

  • 嗨Dinatih,这看起来不错,但我想尽办法解决:“ ActiveStorage不支持未过期的链接”。这意味着什么?我需要的是一个超级简单的方法:当人们加载页面时,图像始终存在。它们不会过期,没有任何幻想。人们访问该网站,就会看到图像。为什么我不能使用ActiveStorage上传公共图像? (3认同)