【问题标题】:Can images be added to the Asset Pipeline at runtime / hot?可以在运行时/热时将图像添加到资产管道吗?
【发布时间】:2012-06-27 07:43:41
【问题描述】:

场景:

  • 已经部署了一个 Rails 3.2 应用,它运行了资产管道流程……
  • 现在,作为用户操作的结果,我们有一个新图像,我们希望它成为资产管道的一部分,以获得缓存清除等好处(尽管现在我考虑了一下,用户上传的图像被赋予了唯一的文件名每次,这是一个有争议的问题)
  • 是否有任何方法能够/现在为新图像使用资产管道是否是个好主意?

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

【问题讨论】:

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


    【解决方案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。有时某些代理不会“破坏”查询字符串缓存,但这是少数。

    【讨论】:

    • “但是,我不会将用户上传的图像视为要编译的资产。我认为这样做是个坏主意。”很可能是这样。我的直觉说这可能是对的。但是你介意充实一下为什么这可能是错误的方式吗?
    • 我认为您需要先问自己为什么要编译这些资产?您获得了哪些好处,与之相关的成本是多少?每次有人上传图像时运行 rake assets:precompile 任务非常昂贵!对于无法使用 image_tag 帮助程序执行的图像,您可以从资产管道中获得什么?编译图像资产有一些微妙的好处,但除非它们是您的项目的要求,否则您可能会为未指定/未实现的收益引入过多的复杂性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多