NoMethodError间歇性地使用命令

时间:2014-09-17 10:06:35

标签: ruby-on-rails activerecord heisenbug rubinius

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

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是一个活跃的记录模型。

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

之前有没有人遇到这样的事情?任何人都可以建议我如何诊断这个错误?这条线似乎不是问题(生产中的日志也没有显示完整的堆栈跟踪)

1 个答案:

答案 0 :(得分:0)

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

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

错误报告为here