【发布时间】:2010-11-23 05:00:16
【问题描述】:
我们有一个 Rails 应用程序在 MySQL 主从设置中运行了一段时间,使用 master_slave_adapter 插件。最近,需要对长时间运行的任务进行后台处理。所以我们选择了DelayedJob。
DelayedJob 的表/模型使用相同的主从适配器。它通过轮询表来保持从属连接处于活动状态。但是主连接长时间保持空闲,一夜之间关闭,下次有人激活作业时会发生这种情况:
Mysql::Error: MySQL server has gone away: UPDATE `delayed_jobs` SET locked_by = null, locked_at = null WHERE (locked_by = 'delayed_job host:[snip] pid:20481')
我听说过在我的database.yml 中使用reconnect 选项的坏事,因为据称它在重新连接后不会设置连接字符集,就像在第一次连接初始化时那样。
实现这项工作的正确方法是什么?
【问题讨论】:
标签: mysql ruby-on-rails delayed-job master-slave