Ruby on rails 在生产服务器上部署后运行延迟作业

Ruby on rails 在生产服务器上部署后运行延迟作业,ruby-on-rails,delayed-job,Ruby On Rails,Delayed Job,有了rails中的delayed_jobs gem(),我可以对通知进行排队。但我不太明白如何在生产服务器上运行排队作业。我知道我可以跑 $ rake jobs:work 在本地服务器的控制台中。正如文件所说, 然后,您可以执行以下操作: RAILS_ENV=production script/delayed_job start RAILS_ENV=production script/delayed_job stop # Runs two workers in separate proces

有了rails中的delayed_jobs gem(),我可以对通知进行排队。但我不太明白如何在生产服务器上运行排队作业。我知道我可以跑

$ rake jobs:work
在本地服务器的控制台中。正如文件所说, 然后,您可以执行以下操作:

RAILS_ENV=production script/delayed_job start
RAILS_ENV=production script/delayed_job stop

# Runs two workers in separate processes.
RAILS_ENV=production script/delayed_job -n 2 start
RAILS_ENV=production script/delayed_job stop

# Set the --queue or --queues option to work from a particular queue.
RAILS_ENV=production script/delayed_job --queue=tracking start
RAILS_ENV=production script/delayed_job --queues=mailers,tasks start

# Runs all available jobs and the exits
RAILS_ENV=production script/delayed_job start --exit-on-complete
# or to run in the foreground
RAILS_ENV=production script/delayed_job run --exit-on-complete
我的问题是如何将它与我的Rails应用程序集成?我想在config/initializers中创建一个名为delayed_jobs.rb的文件,如下所示:

# in config/initializers/delayed_jobs
script/delayed_job start if Rails.env.production?

但我不确定这样做是否正确。谢谢,worker作为单独的进程运行,而不是作为Rails应用程序的一部分运行。最简单的方法是在会话中运行rake任务,以防止在您注销终端会话时退出。但有更好的方法:


您可以使用诸如monit或God之类的系统,或者运行由延迟的job提供的worker脚本。您将在中找到更多信息。

根据我的经验,我找到了使用gem的解决方案,用官方文档的话来说就是gem

它支持编写脚本和执行任意任务,并包括一组正常的默认部署工作流

基本上,它是一个帮助您部署应用程序的工具,包括启动/停止队列、迁移数据库、捆绑新gem等所有任务,以及我们通常使用
ssh
连接所做的所有事情

是一个关于capistrano和
webpartion
作为主机的完整教程。这是一个很好的模块,可以混合capistrano和延迟作业。最后,您应该只关心开发环境,因为每次需要部署到生产环境时,您都要对存储库进行提交,然后

$ cap production deploy
它将管理整个生产环境,停止/重新启动这些队列,重新启动应用程序,安装gems以及通过capistrano脚本方式可以执行的所有操作