Скрипт обновления для конкретной версии приложения развертывания Rails

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

Я хотел бы иметь возможность развернуть / запустить простой сценарий только один раз для конкретного обновления, которое будет выполнять некоторые операции с базой данных (я использую mongoid, и я немного изменил схему)

Допустим, я нахожусь под версией 0.1.25 и обновляюсь до 0.1.26, я хотел бы запустить этот пользовательский сценарий только один раз для серверов с 0.1.25 или ниже (сценарий больше не будет запускаться для следующих обновлений, таких как 0.1 От.26 до 0.1.27)

MyModel.all.each do |instance|
  instance.new_field_with_v26 = somefunction
end

Я считаю, что это может быть реализовано как задача Capistrano, но как мне получить предыдущее значение этой константы? (Application::VERSION_NUMBER)

1 ответ

Вы можете сделать это, используя систему миграции, которую Capistrano сможет запустить. Например: https://github.com/adacosta/mongoid_rails_migrations

Как минимум, что-то вроде этого может служить шаблоном:

  • Сохраните версию схемы в базе данных.
  • Когда вы вносите изменения в схему, увеличивайте версию схемы в коде.
  • Напишите задачу Rake для запуска соответствующих миграций.

Я надеюсь, что это полезно.

Другие вопросы по тегам