如何运行' resque:work'来自rails应用程序的rake任务?

时间:2015-02-11 20:50:34

标签: ruby-on-rails ruby ruby-on-rails-4 jruby resque

跟踪了rails-cast(http://railscasts.com/episodes/271-resque?view=comments),我能够使用worker和rake任务设置我的rails应用程序。

但是,正如rails-cast中指定的那样,一旦我启动了rails服务器,我就必须在一个单独的终端窗口中发出以下命令:

TERM_CHILD=1 QUEUES=* rake resque:work

这让我开始运转,我没有任何问题。但是,我不想在终端上启动rake命令(或编写启动shell脚本),而是在应用程序启动时从Rails本身发出这个终端命令(TERM_CHILD = 1 QUEUES = * rake resque:work),这样它的在应用程序的服务器正常运行时间内可用。

我正在学习Rails框架,所以如果您能给我一些帮助,请告诉我如何/在哪里放置您可能提供给我的任何代码段,我将不胜感激。

非常感谢你。

以下是我的环境规范:

  • 我在Java HotSpot(TM)64位服务器VM 1.7.0_72-b14 + jit [linux-amd64]上使用jruby(jruby 1.7.16.1(1.9.3p392)2014-10-28 4e93f31)

  • Rails版本4.1.8

  • 我正在开发LINUX ubuntu 14.04

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

1 个答案:

答案 0 :(得分:1)

这种做法会让你很难关闭你的resque工人。我建议使用一个名为foreman的常用gem来处理这个问题。我会让你看一下文档,但你的Procfile看起来像是:

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

只需在控制台中运行foreman命令,即可启动rails和resque。这也可以让你轻松退出。

根据OP的消息更新:

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

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