2016-07-25 7 views
0

Я пытаюсь запустить работу через 3 минуты после того, как действие контроллера было выполнено.Начните работу за X минут

Я попробовал это, с DelayedJob:

# in my controller 

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

И в ReminderJob.rb файле:

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 

Однако, при обращении к индексной страницы, я не вижу в ничего бревнами, и Через 3 минуты ничего не происходит.

Что я сделал не так? Есть ли другой рекомендуемый способ запуска задачи «через X минут» без использования sleep?

+0

вы читали [Общие проблемы #-ничего-не бывает] (https://github.com/ collectiveidea/delayed_job/вики/Общие проблемы #-ничего-не бывает)? –

+0

Почему вы не используете встроенный «ActiveJob» рельсы? – siegy22

+0

@RaVeN Я не мог найти способ сказать «начать эту работу за X минут» с помощью activeJob. Это возможно ? –

ответ

1

В этом я действительно использовал бы встроенный компонент rails под названием 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