2016-12-18 9 views
1

Итак, я создал систему клиент-сервер (Rails для клиентов и серверов), в которой будет много клиентов с одним сервером , которые взаимодействуют с использованием REST.Какую фреймворк Ruby/Rails необходимо использовать (который работает на Heroku) для динамического добавления будущих заданий в Rails

Клиенты могут отправлять/обновлять/удалять свои собственные «Работы» на сервере, что сейчас просто таблица с именем «Джобс». Задания принадлежат к таблице с именем «Приложения», которая, как правило, имеет несколько заданий (каждая запись приложения представляет собой клиент, поэтому клиент может только добавлять/удалять/обновлять/читать свои задания на сервере).

Целью этого является то, что клиент может добавлять записи в таблицу «Задания» и указывать время дня (в будущем), чтобы они могли выполнять задание. Запуск, который запускается, - это вызов сторонней электронной почты для отправки электронной почты.

Так что мне нужна инфраструктура Jobs, которая может легко запускаться на Heroku и проходить через таблицу моих рабочих мест (скажем, каждые полчаса .. Или даже каждые 5 минут, может быть ...) и посмотреть, есть ли какие-либо задания он должен выполняться на основе столбца datetime (проверьте, соответствует ли дата-время или меньше текущего рабочего времени)

Какая из лучших рамок Rails/Heroku я должен использовать для это?

Я предпочитаю простоту, так что я смотрел на: https://devcenter.heroku.com/articles/scheduler
Но, я не могу использовать эту, потому что он предупреждает:

планировщик сервис «максимум усилий», а это означает, что выполнение ожидается, но не гарантируется. Планировщик известно иногда (но редко) пропустить выполнение запланированных заданий»

Так потом я посмотрел на в https://devcenter.heroku.com/articles/scheduled-jobs-custom-clock-processes - которые могут быть реализованы с использованием драгоценных камней, как Resque или отложенной работы .. Что я в настоящее время исследования сейчас ..

в идеале, я хотел, чтобы быть в состоянии найти рамки работы, которые бы комплимент (или заменить) мои работы (таблица Так, Всякий раз, когда я что-то добавить к моему Jobs таблицы или удалить его, каждый из моих Записи задания будут иметь отношение 1: 1 к фактическому заданию в структуре Job, что я также буду добавлять/обновлять g/удаление, когда я добавляю/обновляю/удаляю запись в моей таблице Jobs и/или запись Jobs в Framework задания). Конечно, я бы написал логику для всех операций CRUD на сервере (как только он получит звонок REST от клиента). Но клиент должен иметь возможность удалять и повторно добавлять все свои задания на сервер в любой момент ; и я не видел никаких рамок Job, которые позволяли бы динамически добавлять и удалять будущие задания в любой момент времени динамически. Все существующие структуры выглядят так, как будто они созданы для запланированных заданий для запуска в определенные моменты времени или времени, указанные в файле конфигурации. Это хорошо, но я хотел проверить на S.O, чтобы убедиться, что принимаю самое лучшее решение при выборе моей настройки/рамки.

Извините за длинный/сложный вопрос - и я ценю любые предложения или рекомендации, которые у меня есть для меня!
Спасибо !!!

ответ

1

Это звучит как работа для Resque и Resque-scheduler.

Вот пример синтаксиса:

Resque.enqueue_in(5.days.from_now, SendFollowupEmail, argument) 

Если вам необходимо удалить его перед выполнением:

Resque.remove_delayed(SendFollowUpEmail, :user_id => current_user.id) 
+0

Могу ли я Resque использовать мои работы таблицы в моей Postgres БД, а не создание Redis и иметь 2 дублирующие таблицы заданий (один в моих Postgres и один в Redis) – vaskaloidis

+0

@vaskaloidis Жемчужина, называемая DelayedJob, использует Postgres (или mysql). – Iceman

+0

Эй, каково мнение вашего парня о Sidekiq? Почему я не вижу, чтобы это рекомендовалось? Я реализовал Resque Scheduled, как вы рекомендовали, но похоже, что ему нужно больше работать в нескольких разных областях. – vaskaloidis