2015-03-06 1 views
0

Я работаю над одноцелевым приложением Sinatra, которое вызывает вызовы api для некоторых сервисов. Я хотел бы, если бы сервер мог выполнить это действие в заданное время и иметь результаты, сохраненные для клиента по запросу.Выполнение действия на веб-сервере без запроса клиента

Сейчас я обновить только по запросу пользователя, как:

class App < Sinatra::Base 
get '/data' do 
    if time_to_update 
    make_external_api_call 
    end 
    send_data 

Я хотел бы разделить. Перемещение если time_to_update в отдельную функцию и выполнять его каждый час, так маршрут «/ данные/будет выглядеть

get'/data' do 
    send_data 

ответ

0

В основном то, что вам нужно будет установить хрон:

Утилита программного обеспечения Крон является планировщик заданий на основе времени в Unix-подобных компьютерных операционных системах. Люди, которые настраивают и поддерживают программные среды, используют cron для планирования заданий (команд или сценариев оболочки) для периодического запуска в определенное время, даты или интервалы.

Wiki

Трудный путь

Для того, чтобы сделать это, вам нужно извлечь код, предполагающих будет выполняться периодически Rake задачи, а также настроить cron выполнить его правильно.

Пример для убунту будет работать в терминале:

$ crontab -e 

Какой открыть файл для редактирования, где вы определяете работу. Вы можете использовать что-то вроде этого:

0 * * * * cd <path/to/your/project> && rake <your_task_name> 

Легкий способ

Вы можете использовать камень whatever. Для получения более подробного объяснения его использования, отметьте это rails cast episode.

Удачи вам!

+0

Спасибо за все. Это было похоже на мои мысли, и мой друг сказал мне то же самое: задайте URL-адрес, который будет захватывать данные и использовать cron для планирования заданий, которые используют curl или wget для вызова этих конечных точек для получения данных. – SDjukic

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