1

使用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?

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

4

2 回答 2

0

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

您将使用诸如monit 或God 之类的系统或运行由delayed_job 提供的工作脚本。您将在此问题的答案中找到更多信息。

于 2013-02-27T07:12:18.650 回答
0

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

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

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

是关于 capistrano 和webfaction托管的 beutifull 教程。这是一个很好的模块来混合 capistranodelayed_job. 最后你应该只关心开发环境,因为每次你需要部署到生产环境时,你都会提交到你的存储库,然后

$ cap production deploy

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

于 2015-05-23T23:47:34.663 回答