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

时间:2018-08-14 16:14:09

标签: ruby-on-rails heroku rails-activestorage

我在Rails应用程序中遇到一个非常奇怪的错误。 我正在使用ActiveStorage在S3上存储图像,并且图像有时出现但有时不出现。您可以在这里看到它:https://littlered.life/

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

我的代码:

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

experience.rb

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

我在做什么错了?

更新

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

更新2 我已经找到了问题,但是我不知道如何解决。问题是缓存。它与ActiveStorage无关。该图片指向旧网址,因此未显示。实际上,如果我清除缓存,一切都会正常。

我认为我使用集合片段缓存

<%= render partial: :experience, collection: @experiences, cached: true %>

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

1 个答案:

答案 0 :(得分:0)

首先,很棒的应用程序!

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

我的建议是运行

attachment.purge_later()

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

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

在运行所有JavaScript之前。

如果这样做没有帮助,请发布用于处理上载内容的控制器,存储位置和配置(请确保不要发布您的凭据!)。

此外,您正在使用什么主机?尝试在图像消失时进入Rails控制台,并获取“瑜伽”图像的ID,看看它是否为空。

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

问候!