我已经构建了自己的作业服务器,它本质上是一个私有宝石,构建为resque的包装器。
(我不是在Rails环境中运行它)
我看到的任何地方,似乎是记录/推荐的启动工人的方式,是这样的:
$ QUEUE=* rake resque:work
这意味着它必须在Rakefile存在的文件夹中执行。
我正在寻找一种在没有Rakefile的情况下启动它的方法。
到目前为止我学到了什么:
resque
二进制文件,但它似乎只提供了有限的功能,比如删除和列出一个worker,但是没有启动。chdir
(并且此文件夹有一个Rakefile),如下面的代码所示。def start_worker
ENV['QUEUE'] = '*'
Dir.chdir gemdir do
exec "rake resque:work"
end
end
def gemdir
File.expand_path "../../", __dir__
end
欣赏正确方向的任何推动。
答案 0 :(得分:0)
我为此目的解决的问题是:
def start_worker
interval = 5
queue = '*'
ENV['QUEUE'] = queue
worker = Resque::Worker.new
Resque.logger = Logger.new STDOUT
Resque.logger.level = Logger::INFO
## this is not yet implemented in 1.26.0, keeping here as a reminder
# worker.prepare
worker.log "Starting worker"
worker.work interval
end
的改编
作为参考,我还开了一个github issue,但其他人也需要这样的功能。
答案 1 :(得分:0)
我创建了一个脚本,使用以下工作者启动API创建恶魔工作进程。
def start_worker(id)
ENV['QUEUE'] = @queues || "*"
ENV['PIDFILE'] = pid_file(id)
ENV['JOBS_PER_FORK'] = @jobs_per_fork || "1000"
ENV['BACKGROUND'] = 'true'
ENV['TERM_CHILD'] = 'true'
@debug ? ENV['VVERBOSE'] = 'true' : ENV['VERBOSE'] = 'true'
begin
worker = Resque::Worker.new
rescue Resque::NoQueueError
Resque.logger.error "No queue is set for worker_id = #{id}"
end
worker.prepare
worker.log "Starting worker #{self}"
worker.work(5) # interval, will block
end