Rails 3.1:为什么rails_admin导致`rake asset:precompile`失败?

时间:2012-02-19 04:51:11

标签: ruby-on-rails

修改

这个问题应该是:为什么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

这里发生了什么? {(1}}已定义(在不同的rails_admin .css文件中)。那么为什么$red无法访问它呢?我该如何避免这种情况?

3 个答案:

答案 0 :(得分:9)

我在文件config / environments / production.rb中修复了这个问题: 我替换了

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

到另一个

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

此解决方案适用于ruby 1.9.3和rails 3.1

答案 1 :(得分:3)

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

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

  • 确保你没有任何全能*。(css | js) config.assets.precompile
  • 确保你没有任何一切 require_tree .
  • 中的application.(css|js)

我的问题是我正在做前者。这导致我的css文件被孤立地加载,因此变量(如$red)不能在它们之间正确共享。

答案 2 :(得分: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";添加到工作表的顶部。