“Request has expired” when using S3 with Active Storage

大城市里の小女人 提交于 2019-12-14 03:49:04

问题


I'm using ActiveStorage for the first time. Everything works fine in development but in production (Heroku) my images disappear without a reason.

They were showing ok the first time, but now no image is displayed. In the console I can see this error:

GET https://XXX.s3.amazonaws.com/variants/Q7MZrLyoKKmQFFwMMw9tQhPW/XXX 403 (Forbidden)

If I try to visit that URL directly I get an 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>

This is what I have in the view

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

This is what I have in the model

def thumbnail
  self.cover.variant(resize: "300x300").processed
end

In simple words, I don't want images to expire but to be always there.

Thanks


回答1:


ActiveStorage does not support non-expiring link. It uses expiring links (private), and support uploading files only as private on your service.

It was a problem for me too, and did 2 patches (caution) for S3 only, one simple ~30lines that override ActiveStorage to work only with non-expiring (public) links, and another that add an acl option to has_one_attached and has_many_attached methods.

Hope it helps.



来源:https://stackoverflow.com/questions/51502519/request-has-expired-when-using-s3-with-active-storage

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!