gpt4 book ai didi

ruby-on-rails - Rails 延迟作业和 docker : adding more workers

转载 作者:行者123 更新时间:2023-12-02 18:08:49 25 4
gpt4 key购买 nike

我使用 Docker 运行我的 rails 应用程序。延迟的作业由单个工作人员处理,该工作人员在名为 worker 的单独容器中运行,并且在其中工作人员使用命令 bundle exec rake jobs:work 运行。

我有几种类型的作业,我想将它们移到一个单独的队列中,并为此创建一个单独的工作人员。或者至少有两个 worker 来处理任务。

我尝试使用 env QUEUE=default_queue bundle exec rake job:work && env QUEUE=another_queue bundle exec rake job:work 运行我的工作容器,但这没有任何意义。它不会失败,会启动但不会处理作业。

有没有办法在一个容器中拥有单独的 worker ?它是正确的吗?或者我应该为我想要制作的每个 worker 创建单独的容器?

提前谢谢!

最佳答案

运行命令 command1 && command2 导致 command2 仅在 command1 完成时执行。 rake jobs:work 永远不会终止,即使它已经执行完队列中的所有作业,所以第二个命令永远不会执行。

单个“&”可能是您要查找的内容:command1 & command2。这将在它们自己的进程中独立运行命令。

您应该在生产环境中使用delayed_job 脚本,最好将不同队列的工作人员放入不同的容器中,以防其中一个队列包含占用大量资源的作业。

这将为 default_queue 启动一个延迟的作业 worker :
bundle exec script/delayed_job --queue=default_queue start
对于 Rails 4,它是:bundle exec bin/delayed_job --queue=default_queue start
查看有关该主题的答案:https://stackoverflow.com/a/6814591/6006050

您还可以使用 -n 选项在不同的进程中启动多个工作程序。这将在不同的进程中启动 3 个 worker ,所有从 default_queue 中挑选作业:
bundle exec script/delayed_job --queue=default_queue -n 3 start

rake jobs:work 和delayed_job 脚本的区别:
似乎唯一的区别是 rake jobs:work 开始在前台处理作业,而 delay_job 脚本创建一个在后台处理作业的守护进程。您可以使用更适合您的用例的那个。
检查这个 github 问题:https://github.com/collectiveidea/delayed_job/issues/659

关于ruby-on-rails - Rails 延迟作业和 docker : adding more workers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41780739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com