Заводной механизм и Спасение

Я пытаюсь запустить простую задачу, чтобы протестировать совместное использование resque и clockwork.

Мой воркер: app/workers/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

Рейк-файл:

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, и это работает, но я не думал, что вы должны вызывать доставку напрямую. Также я не уверен, действительно ли он работает вне очереди или просто выполняется.


person David Moore    schedule 05.08.2014    source источник


Ответы (1)


Сначала логгер должен быть настроен на:

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

во втором терминале работает! Надеюсь, это поможет.

person David Moore    schedule 05.08.2014