0

我目前正在使用asset_sync 将我的资产从Rails 移动到S3。

我们将我们的 JS 库作为bootstrap.js引导其他样式表/js 的工具,这些样式表/js 应该通过摘要进行缓存控制。由于我希望能够快速更改我们的库的功能,bootstrap.js它是短暂的,因此必须非常小,而缓存消化的 css/js 应该根据 Rails 资产管道原则永远存在。

现在的问题是,当我进行预编译时,bootstrap.js摘要正确加载缓存摘要的其他 css/js,但非摘要bootstrap.js仅指向非摘要等效项,尽管我明确设置:digest为 true

<%= asset_path 'badgelib.js', :digest => true %>

有没有其他方法可以强制资产链接到摘要版本?

4

1 回答 1

0

我讨厌猴子补丁 Sprockets 为我做这件事:

class Sprockets::Helpers::RailsHelper::AssetPaths
def digest_for(logical_path, digest_assets = digest_assets)
  if digest_assets && asset_digests && (digest = asset_digests[logical_path])
    return digest
  end

  if compile_assets
    if digest_assets && asset = asset_environment[logical_path]
      return asset.digest_path
    end
    return logical_path
  else
    raise AssetNotPrecompiledError.new("#{logical_path} isn't precompiled")
  end
end
def rewrite_asset_path(source, dir, options = {})
  if source[0] == ?/
    source
  else
    source = digest_for(source, true) unless options[:digest] == false
    source = File.join(dir, source)
    source = "/#{source}" unless source =~ /^\//
    source
  end
end

结束结束

于 2012-11-12T13:45:41.777 回答