发条和救援

时间:2014-08-05 17:11:44

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

我正在尝试运行一个简单的任务来测试使用resque和clockwork。

我的工人: 应用程序/工人/ logger_helper.rb

class LoggerHelper
  @queue = :log_queue

  def self.before_perform
    Rails.logger = Logger.new(File.open(Rails.root.join('log', 'resque.log')))
    Rails.logger.level = Logger::DEBUG
  end

  def self.perform
    time = Time.now
    Rails.logger.info("testing #{time}")
  end
end    

我的clock.rb文件 LIB / clock.rb

  require File.expand_path('../../config/boot',        __FILE__)
  require File.expand_path('../../config/environment', __FILE__)
  require 'clockwork'

  module Clockwork

  handler do |job|
    Resque.enqueue(job)
  end

  every(10.seconds, 'loggerhelper') {LoggerHelper}
end

Rake文件:

require File.expand_path('../config/application', __FILE__)
Rails.application.load_tasks
require 'resque/tasks'
task(:default).clear
task default: [:spec]

task "resque:setup" => :environment do
  QUEUE = '*'
end

首先我运行resque:setup 其次我运行clockwork lib / clockwork.rb

我在终端

中获得以下输出
INFO -- : Triggering 'loggerhelper'
INFO -- : Triggering 'loggerhelper'
...

但没有任何内容写入日志。

我尝试过各种各样的事情,但我没有看到任何输出。

我确实跑了

every(10.seconds, 'loggerhelper') {LoggerHelper.perform}
在clock.rb文件中

它确实有效,但我认为你不应该直接调用传递。此外,我不确定它是否实际上正在运行队列或只是执行。

1 个答案:

答案 0 :(得分:0)

首先应将记录器配置为:

Rails.logger = Logger.new(Rails.root.join('log', 'rescue.log'))

我也简化了我的clock.rb文件,虽然我认为它的工作原理如下:

require File.expand_path('../../config/boot',        __FILE__)
require File.expand_path('../../config/environment', __FILE__)
require 'clockwork'
module Clockwork
  every(5.seconds, 'Running Logger Helper') {Resque.enqueue(LoggerHelper)}

end

接下来,我创建了一个包含以下内容的Proc文件:

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
resque-web: bundle exec resque-web --foreground
resque: env TERM_CHILD=1 bundle exec rake resque:work QUEUE='*'
clock: bundle exec clockwork lib/clock.rb

如果我跑

 env TERM_CHILD=1 bundle exec rake resque:work QUEUE='*'

在一个终端然后

bundle exec clockwork lib/clock.rb

在第二个终端它工作!我希望这会有所帮助。