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

时间:2013-02-27 06:17:43

标签: ruby-on-rails delayed-job

使用rails中的delayed_jobs gem(https://github.com/collectiveidea/delayed_job),我可以对通知进行排队。但我不太明白如何在生产服务器上运行排队的作业。我知道我可以跑

$ 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?

但我不确定这是否是正确的做法。感谢

2 个答案:

答案 0 :(得分:0)

工作程序作为单独的进程运行,而不是作为Rails应用程序的一部分运行。最简单的方法是在screen会话中运行rake任务,以防止它在您退出终端会话时退出。但有更好的方法:

您可以使用monit或God等系统或运行delayed_job提供的工作脚本。您可以在the answers to this question中找到更多信息。

答案 1 :(得分:0)

在我的经验中,我使用capistrano gem找到了我的解决方案,用官方文档的话来说

  

它支持任意任务的脚本和执行,并包含一组理智的默认部署工作流。

基本上它是一个可以帮助您部署应用程序的工具,包括所有这些任务,如启动/停止队列,迁移数据库,捆绑新宝石,以及我们通常使用ssh执行的所有操作连接。

Here是一个关于capistrano和webfaction托管的美丽教程。 here是一个很好的模块来混合capistrano和delayed_job。最后,您应该只关心开发环境,因为每次需要部署到生产环境时,您都会对存储库进行提交,然后

$ cap production deploy

这将管理整个生产环境,停止/重新启动这些队列,重新启动应用程序,安装宝石以及您可以通过capistrano脚本编写方式执行的所有操作。