我有一个非常长的操作(平均约 30 秒)发生在一个请求周期中。这并不是什么大问题,因为它很少运行,并且只能通过管理门户运行,否则我会将其推送到 Resque 或其他任何地方。
当请求开始并且对象没有被标记时,控制器方法中发生的第一件事就是设置一个标记:
def create
raise if @foo.flag?
@foo.update_attributes! flag: true
# perform lengthy operation
ensure
@foo.update_attributes! flag: false
end
当我开始第一个请求时,它将标志设置为 true 并开始操作。然后,当我在第一个请求挂起时启动第二个请求时,它永远不会引发错误,即使我可以在 Rails 控制台中清楚地看到该标志对于@foo
.
我的印象是update_attributes!
提交了数据库事务,因此后续请求应该会看到更改。不是这样吗?
我只是在使用瘦服务器进行开发测试。有什么办法可以做到这一点吗?