这个问题应该是:为什么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
无法访问它呢?我该如何避免这种情况?
答案 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文件。即:
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";
添加到工作表的顶部。