我使用AWS S3和Rails 7通过Active Storage来存储图像。我通过查询Elasticsearch(使用elasticsearch-model
gem)将数据显示在视图中。虽然这对我的其他数据很有效,但签名的AWS URL过期后会成为一个问题,当然图像也无法访问。
class MyClass
has_one_attached :image
end
我希望能够有一个新的网址,仍然使用ElasticSearch,这样我就不需要去数据库每次我想看到的图像。
我已经查找过是否可以删除过期,但是我发现read不安全,大部分不受支持。我知道Elasticsearch::Model
callbacks存在,但我不清楚它是否可以应用于ActiveStorage::Blob
,特别是当过期发生时,数据库中没有任何变化。
我也考虑过将expires_in
参数传递给附件中的url
方法,然后执行chon作业,每周更新一次图像,从而将URL更改为1周到期。
1条答案
按热度按时间zynd9foi1#
我相信有很多方法可以解决这个问题,但对我来说最有效的是在模型包含
Elasticsearch::Model
时对异步作业使用save回调。当这个特定属性更新时,我调用了一个延迟的作业,延迟时间刚好在s3允许的最大signed_url时间(7天)之前。