ActiveRecord模型“丢失”了他们的find_by_ *方法

问题描述 投票:0回答:1

我们有一个相对标准的Ruby on Rails项目,它有很多后台作业在Resque下运行(Redis作为后端。)

问题是很少 - 也许每月一次,也许少一点 - 我们会突然看到来自Resque的大量异常。例外情况都是如下:

undefined method `find_by_id` for User():Class
undefined method `find_by_name` for CustomerAccount():Class
undefined method `find_by_id` for Job():Class

突然之间,所有ActiveRecord :: Base模型都失去了整个线程的find_by_*方法。重新启动工作程序可以解决问题。

我知道,一般来说,答案必须是“某人,某个地方 - 可能是宝石 - 正在以某种方式打破方法。”或许,不知何故,常量被重新分配给不同的类。但在我开始进行彻底的调查之前,我想检查是否有人遇到过这个问题并且已经解决了。

该项目运行Ruby 2.1.1p76,Rails 3.2.17,Resque 1.25.1。

ruby-on-rails ruby activerecord resque
1个回答
1
投票

关闭这个古老问题的循环:事实证明,moonfly的评论确实是问题,而在长期运行的工作者中,丢弃的数据库连接会导致这个(有些奇怪的)错误消息。

知道了根本原因,我们能够添加一个定期conn刷新(当工作者空闲时间过长时尝试保持连接活动),并且还为db conn被删除时添加检测机制,并且重新连接。所以,非常感谢@moonfly,如果你想把你的评论变成一个答案,我很乐意给你很多延迟回答。

© www.soinside.com 2019 - 2024. All rights reserved.