1

我有一个非常长的操作(平均约 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!提交了数据库事务,因此后续请求应该会看到更改。不是这样吗?

我只是在使用瘦服务器进行开发测试。有什么办法可以做到这一点吗?

4

0 回答 0