0

我们正在尝试为我们的生产环境实施分片。我们面临的问题是我们推迟了一些后台处理的工作。如果我们更新一个模型并在我们的延迟作业中放入一个条目以在延迟作业中进行游行,那么它正在获取该对象的旧值并且它是不一致的。例如,用户模型有名称、位置,如果我想在他改变位置时触发邮件,就像

usr = User.find(1)
usr.position = "foo"
usr.save 

在延迟工作中,如果我获取 usr = User.find(1) 它正在获取旧值。我们在生产环境中使用乘客,mysql 我们仍在 Rails 2.3.18 上。在我们的应用程序操作中遇到同样的问题之前,这也是由 mysql 查询缓存中的错误引起的,我们停止使用它,问题在我们的应用程序操作中得到解决

4

2 回答 2

0

这看起来像是一个缓存问题,有很多解决方法,在您继续并使整个缓存无效之前,这会影响性能,我建议您usr.reload在使用该对象之前发出一个。

问候,

于 2013-05-26T05:40:34.300 回答
0

我能够确定与 mysql 可重复读取有关的问题,更多信息 请参见 http://www.mysqlperformanceblog.com/2012/08/28/differences-between-read-committed-and-repeatable-read-事务隔离级别/

在我们延迟的工作中,我们正在保存具有 after_commit 回调的对象。哪个使事务处于打开状态(因为它无效),哪个既不提交也不发出回滚。我检查了 after_commit 代码,他们将在其中禁用回滚,并且只有在我的情况下出现异常时才会这样做,它只是返回 false 而不会引发异常。

于 2013-06-03T10:11:28.690 回答