1

同じjRubyプロセスのActiveRecordバックエンドで、スケジューリング(rufus_scheduler)と処理(delayed_job、DJ)を実行し、別のスレッドで実行したいとします。Threaded DelayedJobワーカーがActiveRecord接続プールを乾燥させる

ちょうど1 DJワーカーが使用されているとき、これは正常に動作しますが、私は(キューごとに1つのワーカーで)複数のキューを設定するとき、スケジューラは、次のメッセージを表示して終了:

rufus-scheduler intercepted an error:                    
    job:                               
    Rufus::Scheduler::CronJob "*/10 * * * * *" {}                 
    error:                            
    ActiveRecord::ConnectionTimeoutError                    
    could not obtain a connection from the pool within 5.000 seconds (waited 5.000 seconds); all pooled connections were in use 

これは私がにつながります仕事の終了時に労働者がデータベース接続を解放しないと思うが、私はまだ関連コードを見つけていない。プール内の接続数は50に設定されています。

スクリプトはSIGTERMを受信して​​からRails環境にアクセスする必要があります。 MWEは次のとおりです。

require './config/environment' 

module Jobs 
    class ExampleJob < ActiveJob::Base 
    queue_as :system 

    def perform 
     puts 'Performing ExampleJob' 
    end 
    end 
end 

QUEUES = %i(system database).freeze 
NUM_QUEUES = QUEUES.size 

workers = [] 
worker_threads = [] 

NUM_QUEUES.times do |queue_number| 
    worker = Delayed::Worker.new(quiet: false) 
    worker.name = queue_number 
    workers.append(worker) 
    worker_threads.append(Thread.new do 
    worker.start 
    end) 
end 

scheduler = Rufus::Scheduler.new 

scheduler.cron '*/10 * * * * *' do 
    puts 'Scheduled ExampleJob' 
    Jobs::ExampleJob.perform_later 
end 

Signal.trap('TERM') do 
    scheduler.shutdown 
    workers.each do |worker| 
    worker.stop 
    end 
end 

scheduler.join 
worker_threads.each do |thread| 
    thread.join 
end 

これを正しく実行する方法はありますか?

+0

[多種の問題があるようです](https://ylan.segal-family.com/blog/2013/09/11/delayedjob-workers-are-not-thread-safe/)複数のスレッドDelayedJobワーカー。 – chickenburgers

答えて

0

どの程度

module Jobs 
    class ExampleJob < ActiveJob::Base 
    queue_as :system 

    def perform 
     puts 'Performing ExampleJob' 
    end 

    after_perform do 
     ActiveRecord::Base.clear_active_connections! 
    end 
    end 
end 

+0

提案していただきありがとうございます、残念ながら、これは問題を解決しません。 – tschoppi

関連する問題