【问题标题】:Asset Pipeline: excluding an admin.css file资产管道:不包括 admin.css 文件
【发布时间】:2012-03-04 13:48:42
【问题描述】:

我将一个 Rails 3.0 应用程序升级到 Rails 3.1,其中涉及到这个

/*
*= require_self
*= require_tree .
*/

在 application.css 文件中。但是,现在有一个 admin.css 文件覆盖了主应用程序 css 文件。

有没有办法排除 admin.css 文件被包含在内?在站点的管理部分,我手动包含了 admin.css 文件,但我需要一种方法将其从用户界面中排除。

【问题讨论】:

    标签: ruby-on-rails asset-pipeline


    【解决方案1】:

    另一种解决方案是在app/assets/stylesheets 中有两个目录,例如一个public 目录和一个admin 目录。

    然后,在app/assets/stylesheets/application.css 中,您可以将require_tree . 更改为require_tree ./public

    您可能必须在管理方面执行类似的操作。我碰巧在使用Administrate gem,它知道在哪里可以找到自己的资产。

    【讨论】:

    • 对于 JS 资产是否可能类似?你有什么建议让它发挥作用?
    【解决方案2】:

    解决方案添加在 config/assets.rb 中

    #config/assets.rb
    Rails.application.config.assets.precompile  += %w(*.svg *.eot *.woff *.ttf *.gif *.png *.ico *.swf *.xap masonry.pkgd.min.js jquery.colorbox-min.js i18n/jquery.colorbox-pt-BR.js admin.css)
    

    并添加到 app/views/layouts/_adm_layout.html.erb

    #app/views/layouts/_adm_layout.html.erb
    <%= stylesheet_link_tag 'admin', media: 'all', 'data-turbolinks-track' => true %>
    

    【讨论】:

      【解决方案3】:

      您可以像这样在清单中使用stub sprockets' 指令:

      /*
      *= require_self
      *= require_tree .
      *= stub admin
      */
      

      这将排除 admin.css 以及其中所需的 ALL css !! 所以,如果你的 admin.css 的清单看起来像这样:

      /*
      *= require bootstrap
      *= require_self
      */
      

      bootstrap.css 也将被排除,没有require 可以解决这个问题!照顾好这个;)

      【讨论】:

      • 这是对原始问题的更简洁的回答。
      • 这个答案很有帮助,尽管我不喜欢“包括所有除了 X”的模式。似乎说“在这种情况下,包括 X,在其他情况下,包括 Y”会更清楚。请参阅my answer,了解在某些情况下可能是更好的解决方案。话虽如此,我可以想象stub 在适当的情况下完全必要的情况。
      • 我可以使用stub 排除目录吗?如果是怎么办?
      【解决方案4】:

      Similar question was asked earlier and you should check that one

      Sprockets 使用清单文件来确定要包含和提供哪些资产。这些清单文件包含指令——告诉 Sprockets 需要哪些文件才能构建单个 CSS 或 JavaScript 文件的指令。使用这些指令,Sprockets 加载指定的文件,必要时处理它们,将它们连接到一个文件中,然后压缩它们(如果 Rails.application.config.assets.compress 为真)。通过提供一个文件而不是多个文件,可以大大减少页面的加载时间,因为浏览器发出的请求更少。

      您可以根据需要拥有任意数量的清单文件。例如,admin.css 和 admin.js 清单可以包含用于应用程序管理部分的 JS 和 CSS 文件。

      特别是,您可以指定单个文件并按指定的顺序编译它们。

      例子和更多细节可以在this guide找到。

      因此,您的新 application.css 将变为:

      /*
       *= require styles
       *= require layout
       */
      
      /* Other styles */
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 2012-02-10
        • 2012-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多