在Rails 4中生成样式表和javascript文件的列表或路径

时间:2014-08-26 20:40:33

标签: ruby-on-rails ruby-on-rails-4 asset-pipeline sprockets

我正在编写一个使用自定义缓存清单文件的Rails4应用程序,该文件需要包含对所有必需的Javascript和CSS文件的引用。由于应用程序的性质,无法使用Rack Offline gem。

stylesheet_link_tagjavascript_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
...

2 个答案:

答案 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

,它将在开发模式下工作