к предисловию Я являюсь одним из основателей Codeship (https://codeship.io),, который является службой, поддерживающей именно это.
Но по теме, в принципе, есть 2 разных способа, которые, я думаю, могут быть реализованы (имейте в виду, что все имена веток, которые я использую, являются произвольными и могут быть названы совершенно разными):
постановка / производство за один раз
Всякий раз, когда вы нажимаете на своего мастера или определенную ветвь развертывания, вы запускаете свои тесты, и если все они проходят, вы сначала развертываете в своем промежуточном приложении, запускаете отдельные тесты (Selenium или sauce labs отлично подходят для этого), и если это сработает включая миграции, которые вы продвигаете в свое производственное приложение.
Это замечательно, так как последняя версия всегда доступна в производстве, и мы уже давно используем этот цикл. Отлично работает для нас. Недостатком является то, что переход к инсталляции приложения Heroku занимает некоторое время. Если вы хотите выполнить миграцию с копией производственных данных, это займет еще больше времени. Это не вечность, но это занимает пару минут.
подготовка / производство в виде отдельных этапов
Вы можете иметь отдельные промежуточные / производственные ветви, которые развернуты в соответствующих приложениях heroku. Преимущество в том, что вы работаете быстрее, и вы можете контролировать время выпуска определенных частей. Особенно хорошо для приложений, где требуется внешняя обратная связь перед развертыванием в производство.
Мы поддерживаем все это в Railsonfire, но в настоящее время мы работаем над новой версией нашего сервиса, которая намного лучше. Мы действительно хорошо интегрируемся с Heroku, так что вам не нужно об этом думать (но у вас есть возможность сделать это самостоятельно любым удобным для вас способом)