-1
我正在構建一個Sinatra API調用,它將觸發子進程中的長時間運行操作。我使用的是exception_handler寶石,但不明白我如何在分叉過程中使用它。處理分叉進程中的異常
西納特拉應用:
require 'sinatra'
require 'rubygems'
require 'bundler/setup'
require 'exception_notification'
use ExceptionNotification::Rack,
:email => {
:email_prefix => "[Example] ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]},
:delivery_method => :sendmail
}
get '/error' do
raise 'Bad!' # Notification gets sent
end
get '/error_async' do
p1 = fork do
sleep 10
raise 'Bad! (async)' # Notification never gets sent
end
Process.detach(p1)
end
哇,如果你需要明確寫入'ExceptionNotifier.notify_exception'發送通知,然後是創業板基本是沒用的。像這樣的寶石的真正好處是,即使你不知道你的產品Sinatra/Rails應用程序在哪裏拋出異常,你會得到通知,因爲你沒有預料到它(如果你確實這樣做了,開始/ rescue')。 –
@Mike你只是將正在被淘汰的代碼包裝到後臺進程中 - 我認爲這實際上是有道理的。 – Yarin
確實,您可以爲新線程中的所有代碼做一個搜索,看起來有點便宜,但它可以完成工作。 –