リクエスト サイクルで発生する非常に長い操作 (平均で約 30 秒) があります。非常にめったに実行されず、管理ポータルを介してのみ実行されるため、大したことではありません。それ以外の場合は、Resque などにプッシュします。
リクエストが開始され、オブジェクトにフラグが設定されていない場合、コントローラー メソッドで最初に行われるのは、フラグの設定です。
def create
raise if @foo.flag?
@foo.update_attributes! flag: true
# perform lengthy operation
ensure
@foo.update_attributes! flag: false
end
最初のリクエストを開始すると、フラグが true に設定され、操作が開始されます。次に、最初のリクエストがハングしている間に 2 番目のリクエストを開始すると、Rails コンソールでフラグが true であることがはっきりとわかりますが、エラーは発生しません@foo
。
私は、データベース トランザクションをコミットするという印象を受けていたupdate_attributes!
ので、後続のリクエストで変更が表示されるはずです。そうではありませんか?
シンサーバーを使用した開発でテストしています。これを行う方法はありますか?