我有一个 Rails 3 应用程序,它在 mySQL-DB 中有数百条记录,需要每小时更新多次。实际更新是通过delayed_job
在控制器逻辑中触发的(检查自上次更新以来是否经过了足够的时间,然后才发生某事)。
每次更新都很慢,在某些情况下可能需要一秒钟(尽管平均为 3 - 5 次更新/秒)。代码如下所示:
class Thing < ActiveRecord::Base
...
def self.scheduled_update
Thing.all.each do |t|
...
t.some_property = new_value
t.save
end
end
end
我观察到执行在 300 - 400 条记录后停止,然后延迟的作业似乎最终挂起并超时(条目delayed_job.log
)。过了一会儿,下一个开始,也失败了,依此类推,所以并不是所有的记录都得到更新。
这样做的正确方法是什么?
当这样使用时,Rails 如何处理数据库连接?可能是一些未正确检测/处理的超时问题吗?
必须有一个默认的方法来做到这一点,但到目前为止找不到任何东西..
任何帮助表示赞赏。