Ruby on rails Rails同时启动涉及循环的多个进程

Ruby on rails Rails同时启动涉及循环的多个进程,ruby-on-rails,ruby,shell,docker,sh,Ruby On Rails,Ruby,Shell,Docker,Sh,在我的RubyonRails项目中,我有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

在我的RubyonRails项目中,我有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
Worker C的定义如上所述

所有3名员工都在做应用程序需要他们做的事情。但是,在使用Docker部署期间,我需要打开3个终端,并使用
bin/rails runner./lib/workers/worker_a.rb
bin/rails runner./lib/workers/worker_c.rb
bin/rails runner./lib/workers/worker_c.rb

如果我创建一个shell脚本

bin/rails runner ./lib/workers/worker_a.rb
bin/rails runner ./lib/workers/worker_b.rb
bin/rails runner ./lib/workers/worker_c.rb
只有第一个工人将启动,终端将挂在那里,因为有一个循环。回路将阻止工人B和C启动

有没有一种方法可以让脚本一个接一个地启动


谢谢

要重现Sidekiq的本质似乎需要很多努力。虽然您可以使用
bin/rails runner./lib/workers/worker_a.rb&>/dev/null&disown
在后台运行命令@anothermh是正确的-为什么要重新发明轮子,而且做得不好?