【问题标题】:Asset URLs without cache timestamps in Rails在 Rails 中没有缓存时间戳的资产 URL
【发布时间】:2010-12-07 17:00:22
【问题描述】:

我正在使用带有Google IE fix 库的透明PNG。此修复仅适用于以“-trans.png”结尾的图片网址。

Rails 基于时间戳的缓存导致了这方面的问题。当我使用 image_path() 生成图像的 URL 时,它会将文件的最后修改时间戳附加到图像的查询字符串中。由于 URL 不再以“-trans.png”结尾(而是以“?”结尾加上一个长整数),Google 的 javascript 无法激活。

我不想disable asset caching entirely;只是在某些图像上。我也不想将相对 URL 硬编码到服务器的根目录。如果站点部署到服务器根目录或(未知)子目录,我想使用 Rails 正确生成 URL。

我有什么选择?

【问题讨论】:

    标签: jquery ruby-on-rails url caching


    【解决方案1】:
    # apologies I'm doing this off the cuff and haven't run-tested this code
    alias_method_chain :image_path, :google_sense
    
    def image_path_with_google_sense(source)
      raw_image_path = image_path_without_google_sense(source)
      if source.end_with?('-trans.png')
        # strip off the time stamp
        raw_image_path.split('?').first
      else
        raw_image_path
      end
    end
    

    【讨论】:

    • 我希望避免剥离查询字符串,但这是迄今为止唯一的答案。谢谢:-)
    【解决方案2】:

    我想出了一个完全不同的方法来解决这个问题,使用 jQuery 替换相应的 URL:

    jQuery(document).ready(function($) {
      $("img.logo").attr("src", "/images/logo-trans.png");
    });
    

    这样做的好处是,我可以使用 IE 的条件 HTML cmets 仅对 IE 进行缓存剥离。

    【讨论】:

    • 很有趣,但是您的示例代码有几个问题,例如将页面上的每个 IMG 标记替换为“logo”类,如果您是唯一处理代码的人,这很好,但可能很大如果其他设计师对另一个图像使用相同的标签/类组合做出失礼,那真是太棒了。此外,这只适用于一个特定的图像。您在问题中暗示您有多个要“修复”的图像,因此您最好对“src”值进行一些模式匹配,我认为 jQuery 可以做到这一点。
    • 是的,你可以使用这个:$("img[src*='-trans.png']")
    【解决方案3】:

    最简单的解决方案可能只是在将资产标签附加到文件名时添加一个特殊情况以使其正常工作,例如:

       def rewrite_asset_path(source)
          asset_id = rails_asset_id(source)
          if asset_id.blank?
            source
          elsif source.end_with?("-trans.png")
            "#{source[0..-11]}.#{asset_id}-trans.png"
          else
            source + "?#{asset_id}"
          end
        end
    

    这样,任何图像的路径都将被重写,以使缓存破坏器内联。这仍然可以正常工作。

    【讨论】:

      猜你喜欢
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      相关资源
      最近更新 更多