跟踪了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
答案 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
存在,因为它会导致应用程序的其余部分永远不会加载。