如何在Rails7中的Elasticsearch中处理签名的S3图像url过期

mu0hgdu0  于 2023-02-21  发布在  ElasticSearch
关注(0)|答案(1)|浏览(341)

我使用AWS S3和Rails 7通过Active Storage来存储图像。我通过查询Elasticsearch(使用elasticsearch-model gem)将数据显示在视图中。虽然这对我的其他数据很有效,但签名的AWS URL过期后会成为一个问题,当然图像也无法访问。

class MyClass
  has_one_attached :image
end

我希望能够有一个新的网址,仍然使用ElasticSearch,这样我就不需要去数据库每次我想看到的图像。
我已经查找过是否可以删除过期,但是我发现read不安全,大部分不受支持。我知道Elasticsearch::Modelcallbacks存在,但我不清楚它是否可以应用于ActiveStorage::Blob,特别是当过期发生时,数据库中没有任何变化。
我也考虑过将expires_in参数传递给附件中的url方法,然后执行chon作业,每周更新一次图像,从而将URL更改为1周到期。

zynd9foi

zynd9foi1#

我相信有很多方法可以解决这个问题,但对我来说最有效的是在模型包含Elasticsearch::Model时对异步作业使用save回调。当这个特定属性更新时,我调用了一个延迟的作业,延迟时间刚好在s3允许的最大signed_url时间(7天)之前。

after_save :set_refresh_url_job, if: Proc.new { logo_url? }
def set_refresh_url_job
    RefreshLogoUrlJob.
      set(wait: MyModel::LOGO_EXPIRTY_REFRESH).
      perform_later(self)
  end

相关问题