Ruby on rails 如何自动启动Rails延迟作业?

Ruby on rails 如何自动启动Rails延迟作业?,ruby-on-rails,ruby-on-rails-3,delayed-job,Ruby On Rails,Ruby On Rails 3,Delayed Job,我正在使用创建作业队列,例如“mailer” 要使其正常工作,我必须运行以下命令: $ RAILS_ENV=development QUEUE=mailer rake jobs:work 但是如果服务器崩溃并重新启动,我需要worker自动重新开始运行 处理这个问题的推荐方法是什么?不久前,我为DelayedJob编写了一个脚本,为开发模式中的每个job重新加载类。同样的补丁程序也适用于您的需求。您需要使用第三方服务,如monit/bluepill/god/upstart来监视该过程并重新启动

我正在使用创建作业队列,例如“mailer”

要使其正常工作,我必须运行以下命令:

$ RAILS_ENV=development QUEUE=mailer rake jobs:work
但是如果服务器崩溃并重新启动,我需要worker自动重新开始运行


处理这个问题的推荐方法是什么?

不久前,我为DelayedJob编写了一个脚本,为开发模式中的每个job重新加载类。同样的补丁程序也适用于您的需求。

您需要使用第三方服务,如monit/bluepill/god/upstart来监视该过程并重新启动它。我建议结合使用foreman和upstart。请看这里:

如果您有这样的监控工具,betamatt的方法肯定是一种方法

另一种方法是在操作系统的启动中添加一个脚本,该脚本在具有必要权限的用户下运行
RAILS\u ENV=development QUEUE=mailer rake jobs:work
命令


下面是一个如何在上执行此操作的示例,但是如果您查找类似的
init.d
方法,或者任何与您的服务器操作系统相关的方法,您将找到其他方法。基本上,您要寻找的是“如何在启动时运行脚本[您的操作系统名称]”,然后将您的命令包装为可执行脚本。

我的应用程序也遇到了同样的问题。因此,我编写了一个每分钟运行一次的rake任务(作为cron作业)。当延迟作业启动时,它将在临时文件夹中创建一个.pid文件。我用它来检查是否存在延迟的工作流程。如果文件不存在,我通过代码运行控制台命令

延迟的作业状态=File.File?(“/tmp/pids/delayed_job.pid”)

  • 这将检查进程的存在。如果无响应,则转到下一个语句
/bundle exec script/delayed_作业开始生产

  • 这将启动延迟的作业

    • 我的解决方案是在用户的主页中创建bash脚本
      “delayed\u job\u 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
      

      这不是问题:-)但是,如果您需要重新加载行为,这里有一个DJ插件:@betamatt,我的解决方案将在
      HappyDeveloper
      希望在开发模式下运行其服务器和工作程序时工作。在开发模式下,补丁会为每个请求重新加载类。