我在config/application.rb
下面的代碼:滑軌從初始化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與同PUMA服務器運行時,@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
首先,它是(溫和地說)不明顯,我一個線程怎麼能沒有異常死亡,並傳回假我在process_op_queue
以上的循環。另一個很有趣的事實是:
- 實際上有一個線程做的工作爲明顯,我一邊做請求的應用程序,並期待在數據庫
- 在軌臺什麼樣的變化我看到的只有一個線程:
。該應用程序的
2.3.1 :009 > Thread.list
=> [#<Thread:0x000000012f63a8 run>]
2.3.1 :010 >
部分是檢查隊列處理器線程和報告與它這樣顯示出來是死是真正打破了邏輯錯誤。任何建議如何調試和解決這個問題,將不勝感激。謝謝。