【问题标题】:Generating list or paths of stylesheets and javascript files in Rails 4在 Rails 4 中生成样式表和 javascript 文件的列表或路径
【发布时间】:2014-08-26 20:40:32
【问题描述】:

我正在编写一个使用自定义缓存清单文件的 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
...

【问题讨论】:

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


    【解决方案1】:

    那个很有趣!必须进入 Sprockets 源才能弄清楚。

    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
    

    【讨论】:

    • 不幸的是它提供的列表没有'
    • 很接近,但不幸的是,它提供的列表没有考虑到所有资产管道的东西。例如它包括 application.js,但在开发模式下不是 application.js 所需的文件列表 - 也不是对其名称的修改(在开发中附加 ?body=1,在生产中使用校验和)
    • 现在包含十六进制摘要
    • 谢谢。很高兴有人能看懂 sprockets-rails 代码!
    【解决方案2】:

    根据@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,它可以在开发模式下工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多