执行rake脚本时锁定数据库

时间:2011-08-09 08:25:45

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-plugins

我创建了一个rake脚本来向某些用户发送电子邮件。

rake脚本首先需要删除一些旧的数据库记录,然后继续发送电子邮件。

问题是在脚本运行期间,某些用户可能会自己查看/删除数据。如果脚本删除了数据,则应刷新视图,以便容纳新数据。

我能想到的第一个明显的解决方案是永远不要在视图中显示旧数据,这样就避免了记录在删除后被删除的可能性。

但我仍然认为我在这里有竞争条件,我想知道如何在执行脚本时锁定数据库。

我使用Mysql作为我的数据库系统。

1 个答案:

答案 0 :(得分:2)

我会通过设置一个rake任务来解决这个问题,该任务调用模型上的方法来删除数据库记录。然后我将包装代码以删除transaction中的旧邮件。这将在删除电子邮件时锁定数据库,并允许您处理任何其他人尝试删除数据时抛出的任何异常。