Ruby / Rails - лучший способ запуска задач после развертывания? - PullRequest
3 голосов
/ 08 сентября 2010

Мы размещаем наше приложение Ruby on Rails с приложением EngineYard App Cloud, которое очень хорошо сработало для нас.Они предоставляют серию обратных вызовов развертывания (before_restart, after_restart и т. Д.), Которые аналогичны обратным вызовам Capistrano.

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

Это задачи, для которых нет жесткого или быстрого графика, но мы также не хотимзапускать каждую задачу в каждом развертывании, потому что они замедляют процесс развертывания.

Существуют ли системы, которые позволили бы нам определить задачу для запуска при следующем развертывании, что-то вроде миграции.Идеальная система, на мой взгляд, будет работать следующим образом:

  • Мы понимаем, что при следующем развертывании необходимо будет выполнить задачу
  • Мы планируем задачу через систему
  • При следующем развертывании система увидит список задач после развертывания - она ​​заметит, что самая последняя из них еще не была запущена на конкретном сервере (как в случае, когда миграции уведомляют базу данных при запускетак что запускаются только самые последние незапущенные миграции) - запускается новая задача

Любые рекомендации по оптимальным методам планирования этих задач после развертывания и их запуска, если они еще не выполненыбыл запущен на сервере?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 мая 2014

Попробуйте after_party рубиновый гем, который смоделирован на базовой операции db: migrate, но предназначен для задач после развертывания.Задачи после развертывания (rake) создаются с таким именем, как

lib / tasks / deploy / 20130130215258_task_name.rake

Конечно, вы можете вызвать любой код ruby ​​из задачи rake.В документации говорится, что он поддерживает задачи синхронизации и асинхронизации (асинхронные задачи - это долго выполняющиеся задачи, которые могут выполняться в фоновом режиме при запуске приложения)

Я не использовал его, но собираюсь датьснимок, так как у нас схожие требования, как вы описали.

2 голосов
/ 08 сентября 2010

Мне на ум приходят два подхода

  1. Быстрое / грязное решение ... не могли бы вы использовать миграции для этого? Создайте миграцию Rails, которая запускает задачи при запуске rake db: migrate
  2. Используйте тот же подход, что и миграции. Создать одноранговую таблицу для таблицы schema_migrations, а затем в вашем before_symlink.rb (или где-либо еще) запустить задачи, которые еще не были выполнены, а затем обновить таблицу?
...