当less-rails时,rails资产预编译错误

时间:2013-11-14 07:06:37

标签: ruby-on-rails less

我在做rake资产:预编译并发现了这个错误:

rake aborted!
error evaluating function asset-url: method `method_missing' called on terminated object (0x007fe94f714518 flags=0x0 klass=0x0)
(in /Users/huming/work/strikingly/Bobcat/app/assets/stylesheets/themes/bright/main.less)
at less.Parser.parser.parse.i (/Users/huming/.rvm/gems/ruby-1.9.3-p448@bobcat/gems/less-2.3.3/lib/less/js/lib/less/parser.js:421:31)

我使用的是less-rails-2.3.2;我也试过less-rails-2.4.2,它也不行。 知道这是怎么发生的吗?

1 个答案:

答案 0 :(得分:0)

这似乎是由于Ruby 1.9.3中弱引用的工作原因引起的,导致它们过早被垃圾收集。然后,当试图使用垃圾收集对象时,Ruby可以理解崩溃。我也间歇地体验过它。

  

[S] adly,由于1.9.3上WeakRef实现的基本缺陷,没有简单的解决方法

     

可能有一个比ref gem提供的更加坚固的解决方法,但我个人没有足够的带宽使其成为优先考虑因为它适用于rubinius和MRI 2.0

https://github.com/cowboyd/therubyracer/issues/176#issuecomment-20147324

下面是一个在代码中解决的例子,它通过显式标记过早收集垃圾的东西:

-      params[i] = sqlite3val2rb(argv[i]);
+      VALUE param = sqlite3val2rb(argv[i]);
+      RB_GC_GUARD(param);
+      params[i] = param;

https://github.com/sparklemotion/sqlite3-ruby/issues/60