2010-12-05 8 views
5

Ich versuche, von einem verzögerten Job in Schienen zu loggen.Log von innerhalb von Collectitidea/delayed_job

ich konfigurieren Sie es wie folgt:

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 

meinen Job definieren:

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 

Aber wenn ich enquee auf meinen Job

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

Die Protokolldateien bleiben leer nennen, auch obwohl die Tabelle delayed_jobs zeigt, dass der Job ausgeführt wurde.

Irgendwelche Ideen?

+1

Es scheint, du bist nicht allein: http://stackoverflow.com/questions/3500200/getting-delayed-job-to-log –

Antwort

0

Versuchen Sie es, ohne den Namensraum von DJ zu verwenden.

Hier ist Code von einem Job, den ich vor einer Weile verwendet habe. Hinweis: Logger.new wird nur an eine .log-Datei angefügt, wenn sie bereits vorhanden ist.

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

Mein denke, es ist eine Serialisierung Problem mit DJ versucht, das User Objekt serialisiert werden. DJ macht einen schlechten Job, diese Fehler zu melden.

Verwenden Sie Mongoid zufällig? Ich weiß, dass dort Probleme mit JSONizing eines Mongoid-Objekts sind.

Funktioniert es, wenn Sie die Zeichenfolge user_id anstelle des Benutzerobjekts an den Job übergeben? wie so ...

class TestJob 

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

    # ... 

end 

Auch wenn es nicht so schön ist, denke ich, ist es am beste Praxis passiert Literale (Streicher, Floats, etc ...) Arbeiter DelayedJob oder jeden Hintergrunds ist. Dies macht es einfacher, Prozessoren auszutauschen, falls Sie in Zukunft zu Resque migrieren möchten.