我有一个 Rails 3 / ruby 1.9.2 webapp。每隔一段时间 - 它可能只是 100000 中的 1 个请求 - 我收到一个我无法解释的错误报告。
确切的错误各不相同,但它们似乎与我认为实例变量突然变为 nil 一样。最近发生了最明显的例子,其中这个代码在一个助手中 -
@swf_object_count||=0
@swf_object_count+=1
- 引发“NoMethodError:nil:NilClass 的未定义方法‘+’”。但是,请注意,错误不仅限于这种情况,这两行代码仅用于说明,而不是可以解决“解决”问题的方法。
该错误基本上是不可能重现的:我自己从未见过它,只看到了由此产生的错误报告。我相信当我们从 REE 切换到 ruby 1.9.2 时,该错误首次出现。
可能相关或不相关的其他细节:
- 我们在 Solaris 10 上运行 ruby1.9.2p290,使用 unicorn 分叉实例
- 我们没有使用线程或纤维(更正:我们的应用程序本身没有,但我们确实使用了 NewRelic,它有一个用于收集/发布统计数据的后台线程。)
- 我们混合了 .haml 和 .erb 视图,但我只见过这种情况发生在 .haml 中。(不过,我们没有很多 .erb)
- 我从未在控制器代码中看到过这种情况
- 当我知道我们从不调用 Bar.foomethod 的事实时,我偶尔会看到有关“Bar 的未定义方法 'foomethod'”的错误。这可能与上述错误有关,其中 Bar 对象自发地替换了 Foo ivar。
我很难追踪这个。有什么建议,或者有没有人看到任何听起来相似的东西?