我创建了一个rake脚本来向某些用户发送电子邮件。
rake脚本首先需要删除一些旧的数据库记录,然后继续发送电子邮件。
问题是在脚本运行期间,某些用户可能会自己查看/删除数据。如果脚本删除了数据,则应刷新视图,以便容纳新数据。
我能想到的第一个明显的解决方案是永远不要在视图中显示旧数据,这样就避免了记录在删除后被删除的可能性。
但我仍然认为我在这里有竞争条件,我想知道如何在执行脚本时锁定数据库。
我使用Mysql作为我的数据库系统。
答案 0 :(得分:2)
我会通过设置一个rake任务来解决这个问题,该任务调用模型上的方法来删除数据库记录。然后我将包装代码以删除transaction中的旧邮件。这将在删除电子邮件时锁定数据库,并允许您处理任何其他人尝试删除数据时抛出的任何异常。