我正在使用delayed job创建作业队列,例如“邮件程序”
为此,我必须运行:
$ RAILS_ENV=development QUEUE=mailer rake jobs:work
但是如果服务器崩溃并重新启动,我需要工作人员自动重新开始运行。
建议的解决方法是什么?
答案 0 :(得分:1)
您需要使用monit / bluepill / god / upstart等第三方服务来监视进程并重新启动它。我建议使用foreman和upstart的组合。见这里:http://blog.daviddollar.org/2011/05/06/introducing-foreman.html
答案 1 :(得分:0)
前段时间我为DelayedJob写了一个patch来重新加载开发模式中每个作业的类。同样的补丁也适用于您的要求。
答案 2 :(得分:0)
另一种方法是将脚本添加到操作系统的启动程序中,该启动程序在具有必要权限的用户下运行RAILS_ENV=development QUEUE=mailer rake jobs:work
命令。
以下是如何在Ubuntu using Upstart上执行此操作的示例,但如果您查找类似的init.d
方法,或者与服务器操作系统相关的任何方法,您将找到其他方法。您正在寻找的是“如何在启动时运行脚本[您的操作系统名称]”,然后将命令包装在可执行脚本中。
答案 3 :(得分:0)
我的申请正在处理同样的问题。所以我写了一个每分钟都运行的rake任务(作为一个cron工作)。延迟作业启动时,它将在临时文件夹中创建一个.pid文件。我用这个来检查是否存在延迟的工作流程。如果文件不存在,我通过代码运行控制台命令。
delayed_job_status = File.file?(“./ tmp / pids / delayed_job.pid”)
./bundle exec script/delayed_job start production
答案 4 :(得分:0)
我的解决方案是在用户家中创建bash脚本
" delayed_job_startup.sh"
其中包含
#!/bin/bash
cd /home/deploy/project/current/
RAILS_ENV=production bin/delayed_job start
并在文件/etc/rc.local中我从我的用户
运行此脚本 su -s /bin/bash - deploy /home/deploy/delayed_job_startup.sh