【问题标题】:ActiveAdmin assets precompile errorActiveAdmin 资产预编译错误
【发布时间】:2012-01-25 09:40:03
【问题描述】:

ActiveAdmin 给了我一个

Undefined mixin 'global-reset'.

尝试运行时出错

rake assets:precompile

ActiveAdmin 是 0.3.4。 我的 Gemfile 中有 ActiveAdmin 和一个资产组,其中包含 sass、coffee-rails 和 uglifier。

【问题讨论】:

    标签: ruby-on-rails sass activeadmin


    【解决方案1】:

    我刚刚偶然发现了这一点。我原来的问题出在我的production.rb 文件中的config.assets.precompile 指令中。我在那里有一个正则表达式,它匹配来自activeadmin gem 的一些资产,不应该与预编译匹配。将选项更改为以下对我有用:

    # Needed for the ActiveAdmin's manifest assets.
    config.assets.precompile += ['active_admin.css', 'active_admin.js']
    

    我遇到的问题代码块是这样的:

    # This one effectively turns every js/css file, which starts with
    # a letter or a number, into an includeable asset manifest (similar to
    # what application.js and application.css already are).
    # You may want to omit this line for your application.
    config.assets.precompile += [/^[a-z0-9]\w+\.(css|js)$/]
    

    它正在匹配来自 activeadmin gem 的资产并将它们声明为独立清单,当资产管道尝试编译它们时,就会产生此错误。

    更多详情请关注how the config.assets.precompile directive works in Rails, check out this Gist

    【讨论】:

      【解决方案2】:

      问题确实是,正如@dimitar 指出的那样,因为资产管道正在尝试编译部分内容,并且由于它们不是为了自己编译而编写的,所以出现了依赖问题。

      根据您的应用程序,您可能需要所有内容,特别是当您在多个子文件夹中有许多 JS、CoffeScript 和 SCSS/SASS 文件时。在那种情况下,您可能会遇到 rails 抱怨,因为在删除全部捕获时某些内容没有编译用于生产。

      解决方案是捕获所有不包括 SASS 部分的 _filename.css.[scss|sass] 并且可以解决它(对我有用!)。我还包括了来自其他 activeadmin 建议的其他一些技巧,包括要编译的一些 ActiveAdmin 依赖项。这是我的代码:

       # Include all JS files, also those in subdolfer or javascripts assets folder
       # includes for exmaple applicant.js. JS isn't the problem so the catch all works.
       config.assets.precompile += %w(*.js)
       # Replace %w( *.css *.js *.css.scss) with complex regexp avoiding SCSS partials compilation
       config.assets.precompile += [/^[^_]\w+\.(css|css.scss)$/]
       #Adding active_admin JS and CSS to the precompilation list
       config.assets.precompile += %w( active_admin.css active_admin.js active_admin/print.css )
      

      【讨论】:

      • 奇怪,这似乎编译js就好了,忽略css部分很好,但似乎也忽略了非部分css
      【解决方案3】:

      在您的 CSS 文件中,您很可能有:

      @include 'global-reset';
      

      但是,您正在尝试导入全局重置,因此您应该将其更改为:

      @import 'global-reset';
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 2012-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-14
        相关资源
        最近更新 更多