Jor*_*own 12 ruby md5 ruby-on-rails asset-pipeline handlebars.js
我正在Ruby on Rails 3.1项目中编写一个富含Javascript的应用程序,并使用Handlebars作为我的JS模板框架.我正试图找出一种方法来动态地将资产的MD5摘要(在生产中的资产预编译期间生成)附加到我的Handlebars模板内的标签.我希望有一个哈希,资产路径作为密钥,MD5摘要作为值,但我找不到.
一个理想的解决方案是将Ruby中的哈希值传递给Javascript并定义一个Handlebars帮助器,它将自动将MD5摘要附加到资产的"src"属性.
有没有人试图做类似的事情?必须有一种方法可以在Rails中使用Javascript模板,并且还可以获得资产指纹识别的好处.
dee*_*our 39
正如评论中提到的那样,将哈希附加到资产路径是资产管道的默认部分.
在生产中,Rails将MD5指纹插入到每个文件名中,以便Web浏览器缓存该文件
您可以在此处阅读有关资产管道中指纹识别的更多信息.Rails使用Sprockets编译资产.指纹识别是Sprockets流程的一部分.
您可以使用Sprockets find_asset方法,将逻辑路径传递到资产以获取Sprockets::BundledAsset实例.例如
[1] pry(main)> Rails.application.assets.find_asset('application.js')
=> #<Sprockets::BundledAsset:0x3fe368ab8070 pathname="/Users/deefour/Sites/MyApp/app/assets/javascripts/application.js", mtime=2013-02-03 15:33:57 -0500, digest="ab07585c8c7b5329878b1c51ed68831e">
Run Code Online (Sandbox Code Playgroud)
您可以调用digest_path此对象以将其MD5总和附加到资产.
[1] pry(main)> Rails.application.assets.find_asset('application.js').digest_path
=> "application-ab07585c8c7b5329878b1c51ed68831e.js"
Run Code Online (Sandbox Code Playgroud)
有了这些知识,您可以轻松创建一个帮助程序来返回digest_path应用程序中的任何资产,并从您的.js.erb文件中调用此帮助程序.
这是一个古老的问题,但是现在看来您可以使用assets_manifest:
Rails.application.assets_manifest.assets["application.css"]
=> "application-46ae33e78e504ff295219f41d63c79719d062e48dc0c07bd9b6f7bcad72c6636.css"
此处有更多讨论:https : //github.com/rails/sprockets-rails/issues/311
| 归档时间: |
|
| 查看次数: |
5925 次 |
| 最近记录: |