delayed_job не входит - PullRequest
       31

delayed_job не входит

7 голосов
/ 01 марта 2012

Я не могу записывать сообщения от моего процесса delayed_job. Вот работа, которая выполняется.

class MyJob
  def initialize(blahblah)
    @blahblah = blahblah
    @logger = Logger.new(File.join(Rails.root, 'log', 'delayed_job.log'))
  end
  def perform
    @logger.add Logger::INFO, "logging from delayed_job"
    #do stuff
  end
end

Я пробовал разные уровни ведения журнала, и у меня есть config.log_level =: debug в конфигурации моей среды. Я запускаю delayed_job из monit. Я использую delayed_job 3.0.1 с ruby ​​1.9.3 и rails 3.0.10.

Ответы [ 4 ]

17 голосов
/ 12 марта 2012

Объяснение может состоять в том, что задание инициализируется только один раз на стороне производителя.Затем он сериализуется, доставляется через очередь (например, базу данных) и не сериализуется на рабочем месте.Но метод инициализации больше не вызывается в рабочем процессе.Через send вызывается только метод execute.

Однако вы можете повторно использовать журнал регистрации рабочих для записи в файл журнала:

class MyJob
  def perform
    say "performing like hell"
  end

  def say(text)
    Delayed::Worker.logger.add(Logger::INFO, text)
  end
end

Не забудьте перезапустить работников.

10 голосов
/ 14 марта 2012

В RAILS_ROOT / config / initializer есть файл delayed_job_config.rb со следующими строками:

Delayed::Worker.logger = Rails.logger
Delayed::Worker.logger.auto_flushing = true

Не забудьте перезапустить своих работников после этого.

Дайте мне знать, еслиэто помогает

3 голосов
/ 12 марта 2012

Не понимаю, почему вы бы включили регистратор в работу.Когда я это сделал, я установил для работника использование при запуске определенного файла, например Logger.new("log/worker_#{worker_number}"), который гарантирует, что каждый работник выводит в свой файл, и вам не нужно беспокоиться о том, что несколько работников будут записывать в один и тот же файл вв то же время (грязно).

Кроме того, в обычном старом ruby ​​вы можете позвонить @logger.info "logging from delayed_job".

Наконец, я почти уверен, что «execute» вызывается непосредственно вашим работникомэкземпляр, так что вы можете рефакторинг для:

class MyJob
 def perform(blahblah)
  @logger.add Logger::INFO, "logging from delayed_job"
  @blahblah = blahblah
  #do stuff
 end
end
0 голосов
/ 09 октября 2013

Это прекрасно работает в Rails 3.2:

class FiveMinuteAggregateJob < Struct.new(:link, :timestamp)
  def perform
    Rails.logger.info 'yup.'
  end
end
...