Ruby on rails Rails 3.1:为什么Rails_admin导致“rake资产:预编译”失败? 编辑

Ruby on rails Rails 3.1:为什么Rails_admin导致“rake资产:预编译”失败? 编辑,ruby-on-rails,Ruby On Rails,这个问题应该是:为什么rails\u admin导致rake资产:预编译失败? 我正在从Rails 3.0升级到3.1,并启用资产管道。在此过程中,rails\u admin破坏了我的资产预编译: -----> Preparing app for Rails asset pipeline Running: rake assets:precompile rake aborted! Undefined variable: "$red"

这个问题应该是:为什么rails\u admin导致
rake资产:预编译失败?

我正在从Rails 3.0升级到3.1,并启用资产管道。在此过程中,rails\u 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\u admin.css文件中)。那么为什么
theming.css.scss
不能访问它呢?如何避免这种情况?

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

预编译资源以气泡的形式单独查看所有CSS表,然后将它们缝合成一大块。这就是它失败的原因,
$red
变量不会显示在单独的工作表中,即使它会显示在编译版本中


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

哇!我发现了问题——这是一个关于Heroku的问题

不能包含rails_admin.css或.js文件。i、 e:

  • 确保你没有任何一应俱全的*(css | js)在里面
    config.assets.precompile
  • 确保你没有任何通病
    require_树。
    应用程序中。(css|js)

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

我在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

谢谢,Mark!几件事:1)没有文件“/app/assets/stylesheets/rails_admin/base/theming.css.scss”,所以我假设它是从“base.css”等动态创建的;2) 如果假设是正确的,那么“base.css”怎么/为什么会引用“$red”?另外,我通常喜欢rails的“颜色代码”样式,但我不想编辑/维护“rails\u admin”中的代码,这是在我安装“rails\u admin”gem时生成的。所以我现在还不打算使用这个解决方案。哎呀,我没有看到文件路径的前面-我没有意识到这是gem附带的代码。它不是从base.css动态编译的;它实际上是由gem本身在一个完全位于Rails应用程序之外的目录中引用的。一般来说,RailsAdmin gem在预编译资产时似乎遇到了一些问题。这里有一条很长的讨论线索可能会有所帮助:。再次感谢你,马克。那条讨论线索不是我的问题,但它非常相似。我能够找出我的问题,我已经发布了我自己对这个问题的答案。仅供参考:这个答案对发现问题的实质非常有帮助,但它已经脱离主题,因为我严格编辑了我的原始问题。这里也一样。虽然没有发布,但这是我使用的解决方案。@AnnaBillstrom您使用的rails版本是什么?@NikolayMoskvin对,在另一篇文章中,他们讨论了rails 2.0是问题所在-切换到1.9.3,它起了作用。