2012-02-19 52 views
5

编辑

这个问题应该是:为什么rails_admin导致rake asset:precompile失败?Rails 3.1:为什么rails_admin导致`rake asset:precompile`失败?

我从Rails 3.0升级到3.1并启用资产管道。在某处,rails_admin打破了我的资产预编译:

-----> Preparing app for Rails asset pipeline 
     Running: rake assets:precompile 
     rake aborted! 
     Undefined variable: "$red". 
     (in /tmp/build_zkm1tzzdhdh6/vendor/bundle/ruby/1.9.1/bundler/gems/rails_admin-a887eee6e916/app/assets/stylesheets/rails_admin/base/theming.css.scss) 

     Tasks: TOP => assets:precompile:primary 
     (See full trace by running task with --trace) 
     Precompiling assets failed, enabling runtime asset compilation 
     Injecting rails31_enable_runtime_asset_compilation 
     Please see this article for troubleshooting help: 
     http://devcenter.heroku.com/articles/rails31_heroku_cedar#troubleshooting 

这是怎么回事?定义了$red(在不同的rails_admin .css文件中)。那么theming.css.scss为什么不能访问呢?我如何避免这种情况?

回答

9

我在文件配置/环境/ production.rb固定此: 我取代了线

config.assets.precompile = ['*.js', '*.css'] 

到另一个

config.assets.precompile += %w(rails_admin/rails_admin.css rails_admin/rails_admin.js) 

将该溶液工作红宝石1.9.3和导轨3.1

+0

同样在这里。虽然没有发布,但这是我的解决方案。 – thewillcole 2012-03-19 23:28:11

+0

Stil得到错误 – 2013-10-04 20:40:31

+0

@AnnaBillstrom你使用的是什么版本的rails? – 2013-10-06 04:14:45

2

看起来投诉不在base.css中 - 堆栈跟踪表示问题出现在/app/assets/stylesheets/rails_admin/base/theming.css.scss中。这就是变量$ red被调用的地方。

预编译资产会在泡泡中分别查看所有CSS表单 - 然后将它们拼接成一个大块。这就是为什么它失败 - $red变量不显示在单个工作表中,即使它将显示在编译版本中。

您可以通过以下两种方法之一来解决此问题:使用实际颜色代码替换theming.css.scss中的$red,或者可以将变量移动到文件中并导入该文件。例如,在我的应用程序中,我已将所有颜色变量放入“color_codes.css.scss”中。然后,在任何需要引用它们的样式表中,我将@import "color_codes";行添加到表格的顶部。

+0

谢谢,马克!很少的事情:1)没有文件“/app/assets/stylesheets/rails_admin/base/theming.css.scss”,所以我假设它是从“base.css”等创建的; 2)如果假设是正确的,那么为什么“base.css”甚至引用“$ red”? – thewillcole 2012-02-19 09:21:08

+0

另外,我一般喜欢rails的“color_codes”风格,但我不想在“rails_admin”中编辑/维护代码,这是在安装“rails_admin”gem时生成的。所以我不打算使用该解决方案。 – thewillcole 2012-02-19 09:23:25

+1

哎呀,没有看到那个文件路径的前端 - 我没有意识到这是带有宝石的代码。它不是从base.css中即时编译的;它实际上是由完全在Rails应用程序之外的目录中的gem本身引用的。看起来RailsAdmin gem在预编译资产方面总体上有些麻烦。这里有一个很长的讨论线索可能会有所帮助:https://github.com/sferik/rails_admin/issues/682。 – 2012-02-19 10:56:05

3

哇!我发现了这个问题 - 这是Heroku上的known issue

您无法覆盖 - 包含rails_admin .css或.js文件。即:

  • 确保你没有任何包罗万象的*(CSS | JS)在 config.assets.precompile
  • 确保你没有任何包罗万象的 require_tree .application.(css|js)

我的问题是我在做前者。这导致我的css文件被隔离加载,因此像$red这样的变量不能在它们之间正确共享。

相关问题