2010-12-05 12 views
5

私は、delayed_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 

しかし、私は、ログファイルにも、空のまま

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

私の仕事上enqueeを呼び出しますdelayed_jobsテーブルにはジョブが実行されたことが示されています。

アイデア?

+1

あなたは一人ではないようです: http://stackoverflow.com/questions/3500200/getting-delayed-job-to-log –

答えて

0

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 
0

はDJがUserオブジェクトをシリアル化しようとすると、シリアル化の問題です。 DJはそれらのエラーを起こすのは悪い仕事です。

万が一、モンゴイドを使っていますか?私はそこにMongoidオブジェクトのJSONizingに関する問題があることを知っています。

ユーザオブジェクトではなく、ジョブにuser_id文字列を渡すと機能しますか?以下のようなので...それはのようにきれいではありません

class TestJob 

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

    # ... 

end 

にもかかわらず、私はDelayedJobまたは任意のバックグラウンドワーカーするリテラル(文字列、浮動小数点数、など...)を渡すことをお勧めだと思います。これにより、今後Resqueに移行したい場合に備えて、プロセッサをスワップすることが容易になります。

関連する問題