Вход из коллективаidea / delayed_job - PullRequest
5 голосов
/ 05 декабря 2010

Я пытаюсь войти в систему с задержанным заданием в рельсах.

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

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

Но когдаЯ вызываю enquee на моей работе

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

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

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 14 июня 2011

Полагаю, это проблема сериализации, когда DJ пытается сериализовать объект User. Диджей плохо справляется с ошибками.

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

Работает ли это, если вы передаете строку user_id в Job вместо объекта User? вот так ...

class TestJob

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

    # ...

end 

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

0 голосов
/ 12 мая 2011

Попробуйте, не используя пространство имен 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
...