2013-12-07 2 views
0

Я хочу выполнить некоторую задачу за определенный период времени. Предположим, что я хочу выполнить cronjob или какую-то рейк-задачу между 6:00 и 9:00 каждые полчаса. Таким образом, скрипт получит исполнение 6, 6:30, 7, 7:30 ... и последний раз в 9.Рельсы Выполнение задания задания Cron или Rake в течение определенного периода времени

Не могли бы вы дать мне некоторое представление о том, как я могу это сделать с помощью Rails.

Не говорите мне, что график индивидуальной задачи на 6, 6:30, 7 .. период времени.

ANS
Простейший способ я нашел, чтобы использовать всякий раз, когда драгоценный камень и добавляя время cronjob, как показано ниже.

every '*/30 6-9 * * *' do 
    runner "Model.method" 
end 

ответ

1

Один из самых простых способов сделать это через драгоценный камень Ruby под названием whenever. Он предоставляет вам действительно хороший DSL (язык, специфичный для домена), который вы можете использовать, чтобы делать именно то, что вы хотите. Раньше я использовал его для развертывания приложений сервера, и он работал как шарм!

Вот ссылка на хранилище драгоценных камней на Github:
https://github.com/javan/whenever

Здесь также большое RailsCast вы можете смотреть на том, как установить его в Rails: http://railscasts.com/episodes/164-cron-in-ruby


Вы должны быть в состоянии сделать что-то вроде этого:

every :day, :at => (6..8).to_a.map { |x| ["#{x}:00","#{x}:30", "#{x+1}:00"] }.flatten do 
    # Run rake task. 
end 

# => ["6:00", "6:30", "7:00", "7:00", "7:30", "8:00", "8:00", "8:30", "9:00"] 

Вы можете отрегулировать начальный диапазон и внутренний блок, чтобы охватить любой диапазон, который вы хотите. whenever удобно обрабатывает военный формат времени (24-часовой режим), что делает его очень полезным.

Надеюсь, что это поможет!

+0

Я буду работать над этим завтра, и пусть вы знаете, статус. В любом случае спасибо за ответ. Надеюсь, что это решение поможет. –

+0

Я использовал всякий раз, когда gem добавлял делегацию cronjob. Проверьте мой отредактированный вопрос. Благодарю. –

+0

Удивительно, что вы можете использовать фактическое обозначение задачи cron в каждом драгоценном камне. Рад, что смог помочь! – carlosplusplus

1

Мне нравится использовать delayed_job для запланированных задач - https://github.com/collectiveidea/delayed_job

Когда вы enque работы вы можете указать run_at атрибут

+0

Это не отложенная работа. –

+0

«Выполнять cronjob или некоторую задачу rake» - если вы выполняете ruby-код, я могу сказать, что вы можете поместить этот код в объект Delayed Job (вывести его из задачи rake) и использовать планирование замедленного задания через 'run_at' рельсы намного лучше справляются с часовыми поясами и дневным светом, чем cron – house9

+0

Это будет слишком дорого? А также я не хочу заботиться о временных часах дневной экономии света. Спасибо, в любом случае. –

 Смежные вопросы

  • Нет связанных вопросов^_^