あなたはタイムアウトの例外を発生する場合は、Rubyのタイムアウトを使用することができます。ここにはdocがあり、それを使用する方法についてはarticleです。
あなたのコードは次のようになります
require 'timeout'
Listing.transaction do
begin
Timeout::timeout(1) do
Delayed::Job.enqueue(RecentListingsJob.new(user.id, @listing.id))
end
rescue Timeout::Error
<whatever you want to happen>
end
end
私はタイムアウトを許可する取引上の具体的なものはないと思うが、あなたが遅延ジョブを使用している場合、あなたは上max_run_time設定に見ることができますワーカー。 max_run_timeを含むワーカー構成の例をthe docsから
# config/initializers/delayed_job_config.rb
Delayed::Worker.destroy_failed_jobs = false
Delayed::Worker.sleep_delay = 60
Delayed::Worker.max_attempts = 3
Delayed::Worker.max_run_time = 5.minutes
Delayed::Worker.read_ahead = 10
Delayed::Worker.default_queue_name = 'default'
Delayed::Worker.delay_jobs = !Rails.env.test?
Delayed::Worker.raise_signal_exceptions = :term
Delayed::Worker.logger = Logger.new(File.join(Rails.root, 'log', 'delayed_job.log'))
私は質問を更新しました。私はルビーのタイムアウトメソッドを避けたいです。 –
Delayed :: Job構成オプションを使用して、今回は2番目のオプションを追加するための私の答えを更新しました。 –