Возможно, но требует значительного объема заблаговременного планирования. Начиная с Rails 3.1, есть три задачи, которые нужно выполнить
- Загрузить новый код
- Запуск любых миграций базы данных
- Синхронизация активов
Загрузка кода и перезапуск довольно просты, основная проблема заключается в двух других, но обход их почти одинаков.
По сути, вам нужно:
- Сделать код совместимым с миграцией, необходимой для запуска
- Запустите миграцию и удалите любой код, написанный специально для нее
Например, если вы хотите удалить столбец, вам нужно будет установить патч, сообщающий ActiveRecord, чтобы он сначала игнорировался. Только тогда вы сможете развернуть миграцию и очистить этот патч.
Короче говоря, вы должны рассматривать вашу базу данных и совместимость кода как обходной путь, чтобы они могли пересекаться с точки зрения управления версиями.
Альтернативой этому методу может быть одновременное выполнение двух версий приложения на Heroku. При развертывании переключите домен на другую версию, выполните развертывание и снова переключите его. Это поможет в большинстве случаев, но, опять же, проблема с совместимостью баз данных.
Лично я бы сказал, что если ваши развертывания важны, чтобы требовать такого рода рассмотрения, то перевод приложений в автономный режим, вероятно, является самым безопасным ответом. Разбиение приложения на несколько небольших приложений может помочь смягчить это и является механизмом, который я регулярно использую.