私は遅延ジョブで初めて作業していますが、動作するのに幸運を祈ることはありません。理由はわかりません。ジョブはキューに入れられますが、実行されることはありません。それはデータベースから削除されますので、ワーカーはそれを処理しているようですが、それは実行可能なメソッドを実行することはありません。遅延ジョブが実行されていません
私は、次のinitalizer設定しました:
require 'delayed/worker'
Dir.glob("./app/jobs/*.rb").each { |f| require f }
Delayed::Worker.logger = ActiveSupport::BufferedLogger.new("log/dj.log", Rails.logger.level)
module Delayed
class Worker
def self.dj_say(text)
self.logger.info "#{Time.now.strftime('%F %T %z')}: #{text}"
end
end
end
初期化子の作品を、そしてdj.logは仕事が/終了の起動時に書き込まれますありません。
私の仕事は次の要素で構成されます。このコードの
class UpdateServices
attr_accessor :options
def initialize(options)
self.options = options
end
def perform
#Debugging code
Delayed::Worker.dj_say "starting"
File.open("tmp/test.txt","w").close
#End debugging code
#bunch-o-code-here
Delayed::Worker.dj_say "completed"
end
end
どれもこれまでに実行されません。私はperformメソッドにデバッグコードを追加しようとしましたが、決して実行されないので、間違いなく何かが起こっています。モデルはこのように私のコントローラから呼び出され
class Service < ActiveRecord::Base
def start_updating!(options)
Delayed::Job.enqueue(UpdateServices.new(options), :priority => 0, :run_at => 30.seconds.from_now, :queue => 'update_services')
end
end
:私はこのようなモデルからのジョブを呼び出す
Service.new.start_updating!(params)
私の唯一の推測では、私が遅れ呼ばれてるということです:: Job.enqueue誤っしかし、これは私が読んだことすべてに基づいて行われるべきであるように思われる。
指定されたキューがなくてもそれ以上は機能しません。私はキューを制限しません。ワーカーは、テスト目的のために 'bundle exec rake jobs:work'で起動します。すべてのログショーは、ワーカーが開始すると1行、停止すると1行です。その間に何もない。 – Eugene
ActiveRecordクエリ用のレールログを試してください。 DJポーリングが見えますか?また、ジョブはまだデータベースにありますか? – betamatt
遅延ジョブが間違いなくポーリングされています。ここにログスニペット(https://gist.github.com/fb05ccb37abd42c08801)があります。ジョブは "実行"後にデータベースから削除されますが、コードは決して実行されません。そのようなDJは、仕事を見て、それを無視しています。 – Eugene