Ну, во-первых, я не буду перемещать файлы непосредственно с dev или qa на производство. Как и ваш вопрос, я бы разложил тег-релиз с вашего SCM (subversion, в данном случае) прямо в соответствующие среды.
В целом, я бы рекомендовал обратиться к специализированному инструменту развертывания, например Capistrano. Существует немного времени на инвестиции в изучение инструмента и настройку ваших сценариев развертывания, но в то же время возможность сказать «cap deploy qa» или «roll roll production production» позже для изменения вашей текущей версии в вопрос секунд будет: а) больше, чем погасить первоначальные инвестиции времени, и б) сохранить прикладом, когда все пойдет не так.
Чтобы получить ответ на свой вопрос, хотя, если вы делали это вручную, я бы рекомендовал процесс что-то вроде этого (с Судо вставлено в случае необходимости):
- Есть
/opt/my_app/
каталог с несколькими подкаталогами, содержащих разные версии и «текущую» символическую ссылку на то, что живет.
- Укажите ваш апач конфигурацию
/opt/my_app/current
- Чтобы выкатить новую версию, запустить что-то вроде «
svn export https://my_repo/my_app /opt/my_app/1.2.3
» (при условии, что новая версия была 1.2.3).
- Изменить символическую ссылку: «
rm /opt/my_app/current; ln -s /opt/my_app/1.2.3 opt/my_app/current
»
- При необходимости перезапустите Apache или другие процессы.
Обновление базы данных - более интересный вопрос. Лично я люблю Rails's Migrations для этого. Если вы делали это вручную, вы могли бы включить несколько сценариев оболочки в свой проект, чтобы обновить db и отбросить их обратно, соответственно, но правильность этих версий была бы довольно сложной, поскольку они были бы конкретными только для одной конкретной версии , Я бы рекомендовал использовать существующую систему, такую как Migrations (которую можно использовать отдельно от Rails - я видел ее как единственный компонент Ruby для некоторых проектов на основе Java) или задал это как отдельный вопрос.
Настоящий вопрос заключается в том, как мы делаем успешные передачи обслуживания, продвигая сборки из разных сред. –