我间歇性地在生产轨道应用程序中收到以下错误
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环境中重现)。
之前有没有人遇到这样的事情?任何人都可以建议我如何诊断这个错误?这条线似乎不是问题(生产中的日志也没有显示完整的堆栈跟踪)
答案 0 :(得分:0)
经过长时间的拔毛训练后,我发现这是由于rubinius中的一个错误(2.2.10和2.2.9)。 ActiveRecord查询方法where
和order
都在内部调用可枚举的#grep。应用程序运行一段时间后,或者满足某些未知条件时,当数组包含符号时,此函数将停止正常运行。
当一个块作为grep函数的参数给出时,无论给定的模式如何,该块将始终应用于数组的符号元素。
错误报告为here