Rails запускает несколько процессов, которые включают циклы одновременно - PullRequest
0 голосов
/ 30 января 2020

В моем проекте Ruby on Rails у меня 3 рабочих. Они находятся в /lib/workers/worker_a.rb, /lib/workers/worker_b.rb и /lib/workers/worker_c.rb.

Рабочий A определен как

class WorkerA
  def run!
      logger.info "Starting worker A"
      loop do
        begin
          do workerAWork
          sleep 1.5 if workerAWork
        rescue => e
          logger.error e
          sleep 3
        end
      end
    end
end
WorkerA.new.run! if __FILE__==$0

Рабочий B определен очень похоже:

class WorkerB
  def run!
      logger.info "Starting Worker B"
      loop do
        begin
          do workerBWork
          sleep 1.5 if workerBWork
        rescue => e
          logger.error e
          sleep 3
        end
      end
    end
end
WorkerA.new.run! if __FILE__==$0

Рабочий C снова определен, как указано выше.

Все 3 работника делают то, что требуется от приложения. Однако при развертывании с использованием Docker мне нужно будет открыть 3 терминала и запустить каждого работника, используя bin/rails runner ./lib/workers/worker_a.rb, bin/rails runner ./lib/workers/worker_b.rb, bin/rails runner ./lib/workers/worker_c.rb.

Если я создаю сценарий оболочки, который выглядит как

bin/rails runner ./lib/workers/worker_a.rb
bin/rails runner ./lib/workers/worker_b.rb
bin/rails runner ./lib/workers/worker_c.rb

Запустится только первый рабочий, и терминал будет зависать там, как и все oop. L oop не позволит рабочим B и C запускаться.

Есть ли способ написать сценарий так, чтобы его можно было запускать один за другим?

Спасибо!

...