2010-12-05 6 views
5

Próbuję zalogować się w ciągu opóźnionego_roboty w szynach.Zaloguj się w ramach collectiveidea/delayed_job

skonfigurować go w następujący sposób:

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 

Określ swoją pracę:

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 

Ale gdy zgłoszę enquee na mojej pracy

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

Pliki dziennika pozostanie pusta, nawet chociaż tabela delayed_jobs pokazuje, że zadanie zostało wykonane.

Wszelkie pomysły?

+1

Wygląda na to, że nie jesteś sam: http://stackoverflow.com/questions/3500200/getting-delayed-job-to-log –

Odpowiedz

0

Wypróbuj bez użycia przestrzeni nazw DJ.

Oto kod z pracy, której używałem jakiś czas temu. Uwaga: Logger.new dopisze tylko do pliku .log, jeśli już istnieje.

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 
0

Moja go odgadnąć to problem serializacji z DJ próbuje serializacji obiektu User. DJ robi złe zadanie podnoszenia tych błędów.

Czy używasz Mongoida przez przypadek? Wiem, że są tam problemy z JSONizing obiektu Mongoid.

Czy to działa, jeśli przekazujesz ciąg znaków user_id do zadania, zamiast obiektu użytkownika? jak tak ...

class TestJob 

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

    # ... 

end 

Nawet jeśli to nie jest tak ładna, myślę, że to jest najlepsze praktyki do przekazywania literały (łańcuchy, pływaków, etc ...) do DelayedJob lub każdy pracownik tła. Ułatwia to zamianę procesorów na wypadek, gdybyś chciał przenieść się do Resque w przyszłości.