图像在使用 ActiveStorage 的 Rails 应用程序中消失

Man*_*rio 5 ruby-on-rails heroku rails-activestorage

我在我的 Rails 应用程序中遇到了一个非常奇怪的错误。我正在使用 ActiveStorage 在 S3 上存储图像,图像有时会出现,但有时不会。

如果向下滚动一点,一张卡片(“瑜伽撤退”)没有缩略图。

我的代码:

<a href="#" style="background-image: url('<%= rails_representation_path(experience.thumbnail) %>')">
Run Code Online (Sandbox Code Playgroud)

经验.rb

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

我究竟做错了什么?

更新

当我部署时,问题就消失了(我可以看到图像),即使更改与图像无关。如果我再添加另一张卡,图像不会再次出现,除非我再次部署。

更新 2 我发现了问题,但我不知道如何解决。问题是缓存。它与 ActiveStorage 无关。该图像未显示,因为它指向旧 url。事实上,如果我清除缓存,一切正常。

在我看来,我使用集合片段缓存

<%= render partial: :experience, collection: @experiences, cached: true %>
Run Code Online (Sandbox Code Playgroud)

为什么当我更新我的记录时它没有更新?我注意到它不仅不会更新我的图像,而且如果我更改它,它也不会更新我的标题。

Pro*_*eus 0

首先,很棒的应用程序!

其次,您必须检查您的终端。ActiveStorage 不会删除其先前的状态,这意味着,如果您将另一个图像添加到现有图像中,则会出现错误,因为存储不为空。我认为您的“瑜伽”图片在代码中以某种方式与任何进一步的上传相关联,或者您以错误的方式使用了 active_storage 。

我的建议是运行

attachment.purge_later()
Run Code Online (Sandbox Code Playgroud)

在附加图像之前(在控制器内)。另外,您使用涡轮链接吗?确保使用

$(document).on(turbolinks:load, function(){})

在运行所有 JavaScript 之前。

如果这没有帮助,请发布处理上传的控制器、存储位置和配置(确保不要发布您的凭据!)。

另外,你用的是什么主机?当图像消失时尝试进入 Rails 控制台并获取“yoga”图像的 id 并查看它是否变为空。

最后一件事:当我访问您的网站时,我可以看到该图像。

问候!