设想:
- 已经部署了一个 Rails 3.2 应用,它运行了资产管道流程……</li>
- 现在作为用户操作的结果,我们有一个新图像,我们希望它成为资产管道的一部分,以获得缓存清除等好处(尽管现在我考虑了一下,用户上传的图像每次都有唯一的文件名,这是一个有争议的问题)
- 有什么方法可以/现在使用资产管道来处理新图像是个好主意吗?
我有一种感觉,这是一个愚蠢的问题。
设想:
我有一种感觉,这是一个愚蠢的问题。
编译资产只是一个 rake 任务,您可以随时调用该任务。任务是bundle exec rake assets:precompile
。有关详细信息,请参阅http://guides.rubyonrails.org/asset_pipeline.html。
但是,我不会将用户上传的图像视为要编译的资产。我认为这样做是个坏主意。
相反,就像您提到的那样,让您的用户上传的图像具有唯一的名称。因此,当新图像上传/替换时,将生成新名称。可以在回形针宝石中找到这样做的一个示例。它将图像写入磁盘并在数据库中保存记录/参考。这些图像在数据库中有一个 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
. 有时某些代理不会“破坏”查询字符串缓存,但这些是少数。