2016-07-25 5 views
0

コントローラのアクションが実行されてから3分後にジョブを実行しようとしています。X分でジョブを開始

私はDelayedJobで、これを試してみました:インデックス・ページにアクセスするときしかし、私はログ何に表示されていない

class ReminderJob < Struct.new(:user_id) 
    def perform 
    p "run reminder job" 
    # do something 
    end 
    handle_asynchronously :perform, :run_at => Proc.new { 3.minutes.from_now } 
end 

、および:

# in my controller 

def index 
    @books = Book.all 
    Delayed::Job.enqueue(ReminderJob.new(params[:user_id])) 
end 

そしてReminderJob.rbファイルに3分後に何も起こりません。

どうしたのですか? sleepを使わずに「今からX分以内に」タスクを実行する別の推奨方法はありますか?

+0

あなたは[共通の問題の#の何も-起こりません]読んだことがあります(https://github.com/ collectiveidea/delayed_job/wiki/Common-problems#何も起こらない)? –

+0

レールに内蔵された 'ActiveJob'を使わないのはなぜですか? – siegy22

+0

@RaVeN activeJobを使って「この仕事をX分で開始する」と言う方法が見つかりませんでした。これは可能ですか? –

答えて

1

これは私が実際に使用するレールのコンポーネントをActiveJobと呼びます。 here設定方法と基本的な使い方を参照してください。

あなたのケースでは、このコードは動作します:

def index 
    user = User.find(params[:user_id]) 
    ReminderJob.set(wait: 3.minutes).perform_later(user) 
end 

とあなたの仕事を:

class ReminderJob < ApplicationJob # or use ActiveJob::Base 
    def perform(user) 
    # do something with the user 
    end 
end 
関連する問題