狂ってしまっ私はconfig/application.rb
に次のコードを持っている:Railsの初期化子から5出発スレッドが
config.after_initialize do
MyConcern.init_processing
end
そして、次の関連メソッド:
def init_processing
@queue_processor = Thread.new do
process_op_queue
end
@queue_processor.name = "Some Queue"
# @queue_processor_notifier = Queue.new
end
def process_op_queue
while true
req = MyRequest.where(done: Helper::FALSE_NIL_OR_MISSING, started_at: nil).order_by(id: :asc).find_one_and_update({'$currentDate' => {started_at: true}}, return_document: :after)
req ? process_queue_item(req) : sleep(30)
end
end
は、基本的にはいくつかの背景を実行するために、サーバーの起動時にスレッドを開始アプリケーションからHTTP呼び出しによって受け入れられたタスク。
開発モードではすべて正常に動作します。同じピューマサーバと生産ENVでの実行、@queue_processor
は(レールコンソールから)死んで示しています
MyConcern.instance_variable_get("@queue_processor").join
=> #<Thread:[email protected] [email protected]/var/lib/openshift/5842d71a5110e25cdf00000c/app-root/runtime/repo/app/controllers/concerns/my_concern.rb:23 dead>
MyConcern.instance_variable_get("@queue_processor").value
=> false
まず、それはスレッドが例外なく死ぬことができるか私には非自明な(穏やかに言った)であるとしてfalseを返します上記のループはprocess_op_queue
にあります。
- 実際に私は一つだけを見るのアプリへのリクエストを行うと、レールコンソールでデータベース
- に変更内容を見ながら、私には明らかなように仕事をしているスレッドがあります:他の非常に興味深い事実があることですスレッド:
2.3.1 :009 > Thread.list
=> [#<Thread:0x000000012f63a8 run>]
2.3.1 :010 >
アプリケーションの一部がキュープロセッサスレッドをチェックしていて、エラーが報告されているので、死んでいると実際にそのロジックが壊れています。いずれも問題をデバッグして解決する方法をアドバイスしていただければ幸いです。ありがとうございました。