0

我有一个启用了资产管道的 Rails 应用程序。该应用程序允许上传需要作为静态资产的徽标。徽标文件是表中的一列。一般来说,这在开发和生产模式下都可以正常工作。来自 app/assets(分别为 public/assets)的文件和位于 public/logos 中的上传徽标都正确地提供给浏览器。

但是如果上传了使用相同文件名的不同徽标,浏览器仍然显示旧版本(开发和生产模式)。但是当我清除浏览器缓存时,它会更新。我想这一定与缓存有关。我认为有一种方法可以使更新文件的缓存过时,但不知道如何。我也不想强制用户使用不同的文件名,以防他们想要上传徽标的修改版本。要求用户删除他们的浏览器缓存也不可行。使用 assets:precompile 任务不是解决方案,因为徽标是在服务器运行时添加的。

尽管我使用了一段时间,但资产管道和缓存对我来说仍然有点神秘。有没有其他人看到过这种行为?

使用 Ruby 1.9.3 在 Rails 3.2.13 上运行。

4

1 回答 1

0

这听起来不像是资产管道问题。

我假设徽标是使用 /logos/:id/filename.png 之类的目录结构保存的,并且当用户用不同的徽标替换他们的徽标时会出现问题,并且它使用相同的 id 而不是创建新的一。

我要么让它替换徽标记录,以便您获得新 ID,要么将上传的文件重命名为“:filename_:timestamp”,以便文件名更改并使浏览器缓存版本无效。

如果您自己处理文件上传,而不是使用 Paperclip 或 Carrierwave,那么在将文件保存到 public/logos 之前重命名文件并将文件名列写入数据库中,这应该同样容易。

于 2013-06-13T12:37:22.603 回答