0

我在生产 Rails 应用程序中间歇性地收到以下错误

NoMethodError (undefined method `values' on priority:Symbol.):
  app/controllers/things_controller.rb:33:in `index'

违规行如下所示:

@things = Thing.where(:some_column => 'some_value').order(:priority).reverse

Thing 是一个 activerecord 模型。

奇怪的是,当我重新启动应用程序时,错误消失了。只有在一些奇怪的情况下才会发生这种情况(我无法在 preprod/dev 环境中重现)。

有没有人遇到过这样的事情?谁能建议我如何诊断这个错误?有问题的行似乎不是问题(生产中的日志也没有显示完整的堆栈跟踪)

4

1 回答 1

0

在拉长头发后,我发现这是由于 rubinius(2.2.10 和 2.2.9)中的一个错误。ActiveRecord 查询方法whereorder两者都在内部调用 enumerable#grep。在应用程序运行一段时间后,或满足某些未知条件后,当数组包含符号时​​,此函数将停止正常运行。

当一个块作为 grep 函数的参数给出时,该块将始终应用于数组的符号元素,而不管给定的模式如何。

错误报告在这里

于 2014-09-22T13:13:37.833 回答