Мой текущий подход заключается в том, чтобы скрипт проверял, синхронизирована ли удаленная база данных с выпуском, который вот-вот будет выдвинут, используя метод versions_check
, описанный ниже. Если удаленная версия синхронизирована, нажмите новую версию, не переводя ее в режим обслуживания. Если он не синхронизирован, запустите режим обслуживания, создайте резервную копию базы данных, отправьте новую версию, выполните миграции, а затем выйдите из режима обслуживания. Также опубликуйте временное предупреждение всем пользователям о начале обслуживания.
require 'ostruct'
def versions_check(remote: 'production')
last_migration = Dir['db/migrate/*'].sort.last
version = last_migration.gsub('db/migrate/','').split('_').first
remote_migration = `heroku run rake db:version -r #{remote}`
remote_version = remote_migration.split(' ').last
OpenStruct.new(ok?: (version == remote_version), version: version, remote_version: version)
end