2015-02-11 50 views
1

遵循rails-cast(http://railscasts.com/episodes/271-resque?view=comments),我能够使用worker和rake任务同样设置我的rails应用程序。如何从rails应用程序运行'resque:work'rake任务?

然而,由于在轨铸规定,一旦我开始我的Rails服务器,我有一个单独的终端窗口发出以下命令:

TERM_CHILD=1 QUEUES=* rake resque:work 

这得到了我和运行,并我没有问题。但是,我不想在终端上触发rake命令(或者编写启动shell脚本),而是在应用程序启动时从Rails本身发出此终端命令(TERM_CHILD = 1 QUEUES = * rake resque:work)在应用程序在服务器上的正常运行时间内可用。

我正在学习Rails框架的过程中,所以如果您能给我一些帮助,并让我知道如何/放置任何代码片段,您可能会提供给我,我将不胜感激。

非常感谢您提前。

这里是我的环境规格:

  • 我使用JRuby(JRuby的1.7.16.1(1.9.3p392)2014年10月28日4e93f31 Java的热点(TM)64位服务器VM 1.7。 0_72-B14 + JIT [Linux的AMD64])

  • 的Rails 4.1.8版本

  • 我开发的Linux操作系统Ubuntu 14.04

  • 我将部署这个应用程序的Wi作为WAR包的Tomcat服务器上的ndows 2008服务器
  • 我正在使用PostgreSQL作为我的数据库。

回答

1

该方法会让您很难关闭您的resque工人。我建议使用一个叫做foreman的通用宝石来处理这个问题。我要让你看看一个文档,但是你Procfile看起来是这样的:

web: rails s -p $PORT 
resque: TERM_CHILD=1 QUEUES=* rake resque:work 

你将能够通过只在控制台中运行foreman命令启动两条轨道和resque。这也可以让你轻松退出。

每个操作的消息更新:

require 'resque/tasks' 
ENV['TERM_CHILD'] = 1 
ENV['QUEUES'] = '*' 
Thread.new { Rake::Task["resque:work"] } 

Thread.new是存在的,因为它否则会导致应用程序的其余部分永远不会加载。

+0

谢谢,但我不认为工头会适合这项法案。 问题是,我的Windows生产服务器上没有安装ruby,因此终端上无法使用rails/rake/foreman命令。 如果你可以提出一种从rails内部启动resque工作者的方法(我同意,一旦rails应用程序停止,我想杀死工作者)。 非常感谢你 – 2015-02-11 23:15:15

+0

更新你的情况。 – RipTheJacker 2015-02-12 00:11:00

+0

非常感谢 - 这是我最终想出的完全相同的解决方案。我将这段代码放入初始化程序中,它像一个魅力。 – 2015-02-12 03:27:15

相关问题