2010-12-05 9 views
5

के भीतर से लॉग इन करें मैं रेल में देरी_job के भीतर से लॉग इन करने का प्रयास करता हूं।collectiveidea/delayed_job

मैं निम्नलिखित के रूप में यह कॉन्फ़िगर करें:

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) 

लॉग फाइल, खाली रह भी हालांकि देरी_jobs तालिका से पता चलता है कि नौकरी की गई थी।

कोई भी विचार?

+1

ऐसा प्रतीत होता है कि आप अकेले नहीं हैं: http://stackoverflow.com/questions/3500200/getting-delayed-job-to-log –

उत्तर

0

डीजे के नामस्थान का उपयोग किये बिना इसे आज़माएं।

यहां एक नौकरी से कोड है जो मैं थोड़ी देर पहले उपयोग कर रहा था। नोट: 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 
0

मेरी यह लगता है कि डीजे User वस्तु क्रमानुसार करने की कोशिश कर के साथ एक क्रमबद्धता मुद्दा है। डीजे उन त्रुटियों को बढ़ाने का बुरा काम करता है।

क्या आप किसी भी मौके से Mongoid का उपयोग कर रहे हैं ?? मुझे पता है कि एक Mongoid वस्तु JSONizing के साथ वहाँ मुद्दे हैं।

यदि आप उपयोगकर्ता ऑब्जेक्ट की बजाय जॉब में user_id स्ट्रिंग पास करते हैं तो यह काम करता है? की तरह तो ...

class TestJob 

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

    # ... 

end 

भले ही यह रूप में सुंदर नहीं है, मुझे लगता है कि यह शाब्दिक (स्ट्रिंग्स, तैरता है, आदि ...) DelayedJob या किसी भी पृष्ठभूमि कार्यकर्ता को पारित करने के लिए सबसे अच्छा अभ्यास है। यदि आप भविष्य में Resque में माइग्रेट करना चाहते हैं तो यह प्रोसेसर को स्वैप करना आसान बनाता है।