Перезапустите фоновую задачу rake rails 4

У меня есть задача rake в приложении rails 4, которая вызывается с моего контроллера и работает в фоновом режиме, например:

system "rake fetch_news SOURCE=#{src} CATS=#{cat} C_ID=#{c_id} S_ID=#{s_id} FEED_ID=#{f_id} &"

Он отлично работает в фоновом режиме, выполняет свою работу, но мне нужно снова запустить его с теми же параметрами после задержки в 1,5-2 минуты.

Неофициально я вижу это так:

desc "Fetch news for specific category"
task :fetch_news => :environment do
    ... code of my background task ...
   sleep 120
   << insert here some code to restart the task >>
end

но я не знаю, как это реализовать :(. Первоначально я думал, что могу определить функцию в своей задаче, вызвать функцию, заснуть, вызвать ее снова, но задача не позволяет определить функцию в.

Я искал в Google решения, но не нашел ничего, что могло бы мне помочь. Можете ли вы дать мне идею?

Спасибо!


person kitz    schedule 27.02.2015    source источник


Ответы (1)


Вместо задач rake вы должны использовать:

  • CRON - если параметры фиксированы. Посмотрите на когда угодно, если вы хотите упростить работу с CRON.
  • Sidekiq - если вы хотите изменить параметры во время выполнения. Sidekiq может определять повторяющиеся задания.
person Maxim    schedule 27.02.2015
comment
вы можете использовать как задачу rake, так и cron — выполнить задачу rake с помощью cron. Вы также можете использовать ActiveJob в Rails4 (то, что уже использует OP), чтобы установить задание, которое будет выполняться в будущем — вы не можете повторяющиеся задания, но у вас может быть задание, которое выполняется, а затем устанавливает другое задание для выполнения в будущем. Только некоторые адаптеры ActiveJob поддерживают будущие запланированные задания. edgeguides.rubyonrails.org/active_job_basics.html И вы даже можете иметь задание cron, которое запускается каждые X минут для выполнения задачи rake для планирования ActiveJob. Я бы сделал это таким образом. - person jrochkind; 27.02.2015