2014-12-23 2 views
0

У меня есть приложение Rails, которое извлекает информацию из различных внутренних API и хранит в локальной базе данных SQLite. Мое приложение для рельсов - это, по сути, прославленный пользовательский интерфейс поверх этих данных, извлеченных из нескольких API.Автоматическое перезапуск приложения Rails и выполнение задач Rake

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

В сущности, я хочу сделать что-то вроде этого каждые Х часов -

  1. автоматически выключит приложение рельсы
  2. расфасованные страницу обслуживания ("К сожалению, мы вернемся в течение нескольких минут «)
  3. Отбросьте дб, воссоздать его, и повторно перенести его (rake db:drop; rake db:create; rake db:migrate)
  4. Выполнить свою пользовательскую задачу грабли, что снова заполнит таблицы (rake myApp:update)
  5. Перезапустите Применение в процессе на

Это вызывает несколько вопросов

  1. Как есть приложение перезапускается автоматически каждые X часов? Должен ли я планировать это извне с помощью задания cron? Есть ли способ рельсов, я могу это сделать?
  2. Как отобразить страницу обслуживания, если приложение не работает? Опять же, это тоже внешнее перенаправление, которое мне нужно управлять?
  3. Самое главное, есть ли хороший способ отбросить таблицы и воссоздать их, или я должен использовать задачи rake? Есть ли способ вызвать rake задачи при запуске? Я думаю, я мог бы создать процесс .rb под config/initalizers, который будет запускаться при запуске (но только когда Rails.env == 'production')?

Спасибо за помощь!

ответ

1
  1. Просто создайте задачу Cron, которая работает периодически. Эта задача Cron запускает оболочку, которая просто выполняет все шаги, которые вы запускаете вручную.

  2. Есть драгоценный камень (https://github.com/biola/turnout) на странице поддержки.Он обеспечивает выполнение задач рейка, таких как rake maintenance:start и rake maintenance:end.

  3. Я думаю, что нет необходимости бросать таблицы. Обычно этого достаточно, чтобы просто удалить все записи, а затем создать новые записи. Если вам действительно нужно отбросить базу данных, скорее всего, можно просто восстановить схему базы данных из дампа структуры.

+0

это здорово! Используя этот драгоценный камень, я мог просто разместить страницу обслуживания, а затем запустить задачи рейка, чтобы повторно создать БД. Мне даже не пришлось бы прикладывать приложение, пока SQLite DB отбрасываются и воссоздаются за кулисами. – user2490003

1
  1. Существует не «рельсы путь», чтобы перезагрузить рельсы приложение каждый так часто, так как запуск и остановка приложения рельсов вне контекст самого приложения. Задача cron - прекрасный способ пойти.
  2. Как правило, веб-сервер работает «впереди» приложения rails, apache или nginix являются общими. Страница технического обслуживания должна быть реализована на этом уровне (так как приложение rails на мгновение забывает), должно быть достаточно повторного изменения конфигураций и перезагрузки. Затем, возвращая это приложение обратно, восстановите конфигурацию, чтобы указать на приложение rails и перезагрузить его снова.
  3. С помощью задач рейка у вас все в порядке, установите переменную окружения RAILS_ENV=production, чтобы они попали в правый файл sqlitedb. Не утруждайте себя попыткой вызвать задачи рейка при запуске rails, вызвать их из сценария, вызванного вашим заданием cron, а затем запустить приложение после этого.
+0

Спасибо! Я бы точно подумал, что есть стандартный способ перезагрузить приложение, но ваше объяснение тому, что оно выходит за рамки стека рельсов, имеет смысл. Другой пользователь в этом потоке указал на драгоценный камень, который также предоставляет страницу обслуживания. – user2490003

+0

Если вы не планируете закрывать приложение rails, этот драгоценный камень должен делать красиво. – ctcherry