(由于删除敏感信息而重新添加)
我们目前有4名延迟的工作人员处理由我们的主要应用程序创建的后台工作。这些都是通过upstart脚本生成自己的实例。我们希望这4个工人同时工作,但他们现在正在等待彼此完成,然后才能处理另一个工作。这导致我们的工作池积压很多,因为实际上只有一项工作是一次性运行而不是期望的4.
我尝试过但无济于事的事情:
script/delayed_job start
& bundle exec rake jobs:work
)我们在这里缺少什么东西吗?我们怎样才能让工人再次并行运行?提前谢谢。
Upstart Script(使用不同的索引运行4次):
instance $index
script
# this script runs in /bin/sh by default
# respawn as bash so we can source in rvm
exec /bin/bash <<'EOT'
# rvm
source /home/user/.rvm/scripts/rvm
cd /home/foo/bar/current
exec /usr/bin/env RAILS_ENV=production bundle exec rake jobs:work
EOT
end script
答案 0 :(得分:0)
对以下陈述进行更正 - 我最近在AWS上学习并实施了delayed_jobs。
在PROD中我按照https://github.com/collectiveidea/delayed_job使用bin / delayed_job和daemons gem
我的应用程序在AWS上,因此启动/重启命令为:
<BrowserRouter>
rake jobs:工作通常用于从我阅读的各种文章中启动开发环境中的工作者。
要进一步解决问题,请尝试在rails控制台中执行此操作:
su -s /bin/bash -c "bundle exec bin/delayed_job -n 2 --pid-dir=$EB_APP_PIDS_DIR restart" $EB_APP_USER
并检查作业是否得到更快处理。
要尝试的另一件事: 通过您通常使用的脚本停止所有工作人员。 然后做
Delayed::Worker.new
查看所有工作进程是否实际被杀死。 如果工作者系统进程仍然处于闲置状态,则必须手动终止这些系统进程。 然后重新启动工作人员并检查行为是否存在差异。