私はマルチユーザーツリー編集アプリに取り組んでいます。バックグラウンドプロセスにresquegemを使用します。実行時のマルチユーザーの競合を回避するために、コマンドパターンを使用し、ユーザーアクションをresqueキューに保存して、誰かがブランチを削除している場合、他のユーザーがそのブランチの子を編集できないようにします。
動作しますが、resqueワーカーが5秒間隔でジョブをチェックするため、キューから最初にジョブを選択するのは非常に遅くなります。編集インターフェースの速度が大幅に低下します。このようなことをすることは可能です:
cmd = MyCommand.create!(:attr1 => 'foo', :attr2 => 'bar')
Resque.enqueue(MyCommand, cmd.id)
workers = Resque.workers.select {|w| w.queues.include?('my_queue') }
raise "Should be only one queue for commands!" if workers.size != 1
not_done = true
while not_done
not_done = workers[0].process
end
それは私が必要とすることをします、しかし私はこれをするよりエレガントな方法があるかどうか疑問に思います。また、:processはWorkerインスタンスの非推奨のメソッドです。