Лог из коллективной идеи/delayed_job

Я пытаюсь войти в систему из delayed_job в rails.

Я настраиваю его следующим образом:

Delayed::Worker.destroy_failed_jobs = false
Delayed::Worker.max_attempts = 3
Delayed::Worker.backend = :active_record
Delayed::Worker.logger = ActiveSupport::BufferedLogger.new("log/#{Rails.env}_delayed_jobs.log", Rails.logger.level)
Delayed::Worker.logger.auto_flushing = 1

Определить мою работу:

class TestJob

    def initialize(user)
        @user = user
    end


     #called when enqueue is performed
    def enqueue(job)
       Delayed::Worker.logger.info("TestJob: enqueue was called")
    end

    def perform
        Delayed::Worker.logger.info("\n\n\n\nTestJob: in perform, for user #{@user.twitter_username}")
    end
end

Но когда я звоню в очередь на свою работу

 Delayed::Job.enqueue(TestJob.new(user), 2)

Файлы журнала остаются пустыми, несмотря на то, что таблица delayed_jobs показывает, что задание было выполнено.

Любые идеи?


person MikeMarsian    schedule 05.12.2010    source источник
comment
Похоже, вы не одиноки: stackoverflow.com/questions /3500200/получение отложенного задания в журнал   -  person Dave Rapin    schedule 02.05.2011


Ответы (2)


Попробуйте без использования пространства имен DJ.

Вот код из работы, которую я использовал некоторое время назад. Примечание. Logger.new просто добавляется к файлу .log, если он уже существует.

class ScrapingJob < Struct.new(:keyword_id)
  def perform
      begin
       ...
      rescue =>  error
        log = Logger.new("#{Rails.root}/log/scraping_errors.log")
        log.debug "logger created for '#{keyword.text}' (#{keyword.id}) on '#{keyword.website.url}' (#{keyword.website.id})"
        log.debug "time: #{measured_at.to_s(:short)}"
        log.debug "error: #{error}"
        log.debug ""
      end
    end
  end
person danneu    schedule 12.05.2011

Я предполагаю, что это проблема сериализации, когда DJ пытается сериализовать объект User. DJ плохо справляется с устранением этих ошибок.

Вы случайно не пользуетесь монгоидом?? Я знаю, что есть проблемы с JSONizing объекта Mongoid.

Будет ли это работать, если вы передадите строку user_id в задание вместо объекта пользователя? вот так ...

class TestJob

    def initialize(user_id)
        @user = User.find(user_id)
    end

    # ...

end 

Несмотря на то, что это не так красиво, я думаю, что лучше всего передавать литералы (строки, числа с плавающей запятой и т. д.) в DelayedJob или любой фоновый рабочий. Это упрощает замену процессоров, если в будущем вы захотите перейти на Resque.

person Jonathan    schedule 14.06.2011