2

我在做 rake assets:precompile 并发现了这个错误:

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,它也不起作用。知道这是怎么发生的吗?

4

1 回答 1

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

于 2014-06-03T03:01:19.190 回答