Скрипт обновления для конкретной версии приложения развертывания 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 для запуска соответствующих миграций.
Я надеюсь, что это полезно.