我正在编写一个使用自定义缓存清单文件的Rails4应用程序,该文件需要包含对所有必需的Javascript和CSS文件的引用。由于应用程序的性质,无法使用Rack Offline gem。
stylesheet_link_tag
和javascript_include_tag
调用会生成正确的文件列表(由资产管道生成),但会将其嵌入HTML标记中。
有没有办法获取控制器中所有已编译的javascript和样式表文件的路径?
例如
/assets/custom.css?body=1
/assets/incidents.css?body=1
/assets/users.css?body=1
/assets/application.css?body=
/assets/jquery.js?body=1
/assets/bootstrap/affix.js?body=1
...
答案 0 :(得分:5)
那个很有趣!不得不进入链轮源来解决它。
asset_list = Rails.application.assets.each_logical_path(*Rails.application.config.assets).to_a
然后,您可以通过资产列表进入grep,例如:
asset_list.grep(/\.(js|css)/)
编辑:
如果你想要十六进制摘要,你可以这样做:
environment = Rails.application.assets
asset_list = environment.each_logical_path(*Rails.application.config.assets).to_a
asset_list.map! { |asset| environment.find_asset(asset).digest_path rescue nil }.compact
答案 1 :(得分:0)
基于@kdeisz研究,此代码在清单文件的控制器中起作用:
@assets = Rails.application.assets.each_logical_path(*Rails.application.config.assets).to_a
@assets = @assets.map{ |p| view_context.compute_asset_path(p) }
render 'manifest.text', content_type: 'text/cache-manifest'
获取实际资产路径需要compute_asset_path
函数。
注意:我还没有在生产模式下测试过这个。如果设置config.assets.debug = false