我已经构建了自己的作业服务器,它本质上是一个私有的创业板,是围绕雷克构建的包装器。
(我不是在Rails环境中运行这个程序)
在我所看到的任何地方,似乎都有文件记载的/推荐的开始工人的方式,就是这样:
$ QUEUE=* rake resque:work这意味着它必须在Rakefile存在的文件夹中执行。
我正在寻找一种方法来开始它没有Rakefile。
到目前为止,我学到的是:
resque二进制文件,但它似乎只提供了有限的功能,比如删除和列出一个工作人员,而不是启动。chdir (这个文件夹有一个Rakefile),如下所示。def start_worker
ENV['QUEUE'] = '*'
Dir.chdir gemdir do
exec "rake resque:work"
end
end
def gemdir
File.expand_path "../../", __dir__
end感谢你在正确的方向上的任何推动。
发布于 2016-08-23 12:40:12
我现在想出的解决办法是:
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它是来自rake任务的代码的一种改编
作为参考,我还打开了一个github问题,以避免其他人也需要这样的功能。
发布于 2017-03-18 10:52:57
我已经创建了一个脚本来使用下面的工作者启动API来创建demon进程。
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
endhttps://stackoverflow.com/questions/39083764
复制相似问题