可以在运行时/热门时将图像添加到资产管道吗?

时间:2012-06-26 01:41:25

标签: ruby-on-rails-3 asset-pipeline ruby-on-rails-3.2 sprockets

情景:

  • 已经部署了Rails 3.2应用程序,它运行了资产管道流程......
  • 现在,作为用户操作的结果,我们有了一个新的图像,我们希望它成为资产管道的一部分,以获得诸如缓存清除之类的好处(尽管现在我考虑一下,用户上传的图像给出了唯一的文件名每一次,这都是一个有争议的问题)
  • 对于那个新图像,有没有办法能够/此时使用资产管道?

我觉得这是一个愚蠢的问题。

1 个答案:

答案 0 :(得分:1)

编译资产只是一个rake任务,您可以随时调用任务。任务是bundle exec rake assets:precompile。有关详细信息,请参阅http://guides.rubyonrails.org/asset_pipeline.html

但是,我不会将用户上传的图像视为要编译的资产。我认为这样做是个坏主意。

相反,就像您提到的那样,让用户上传的图片具有唯一的名称。因此,当上传/替换新图像时,将生成新名称。可以在paperclip gem中找到完成此操作的示例。它将图像写入磁盘并在数据库中保存记录/引用。这些图像在数据库中具有id,URL涉及该id。所以你会/photos/4/nothing.png/photos/2/yes.png。其中2和4指向具有元数据/图像关系的数据库记录。

此外,当您使用image_tag rails视图助手时,它会自动将缓存破坏者添加到图像的URL上。缓存触发器作为查询字符串完成,因此image_tag('test.png')变为/images/test.png?1234567890。有时某些代理不会“破坏”查询字符串缓存,但这些代理是少数。