2015-02-27 3 views
0

У меня есть задача загребать рельсы 4 приложения, которое вызывается из моего контроллера и работает в фоновом режиме, как это:Перезапуск рек фоновой задачи рельсов 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 для решения, но я не нашел ничего, чтобы помочь мне. Можете ли вы дать мне идею?

Спасибо !

ответ

0

Вместо граблейных задач вы должны использовать:

  • CRON - в случае если параметры зафиксированы. Посмотрите на whenever, если вы хотите упростить работу с CRON.
  • Sidekiq - в случае если вы хотите изменить параметры во время выполнения. У Sidekiq есть возможность определить recurring jobs.
+0

Вы можете использовать как задачу рейка, так и cron - выполнить задачу rake с помощью cron. Вы также можете использовать ActiveJob в Rails4 (что OP уже использует) для задания задания, которое будет выполняться в будущем - вы не можете выполнять повторное создание заданий, но вы можете выполнить задание, которое выполняется, а затем задает другое задание, которое будет выполнено в будущем. Только некоторые адаптеры ActiveJob поддерживают будущие запланированные задания. http://edgeguides.rubyonrails.org/active_job_basics.html И вы можете даже выполнить задание cron, которое запускает каждые X минут, чтобы выполнить задачу рейка, чтобы запланировать ActiveJob. Я бы постарался это сделать. – jrochkind