Ну, во-первых, я бы не стал переносить файлы напрямую из dev или qa в производство. Как и предполагает ваш вопрос, я бы развернул помеченный релиз из вашего SCM (в данном случае это subversion) непосредственно в ваших соответствующих средах.
В общем, я бы порекомендовал обратиться к специализированному инструменту развертывания, например Capistrano . Есть немного предварительных затрат времени на изучение инструмента и настройку сценариев развертывания, но возможность позже сказать «cap deploy qa» или «cap откат производства», чтобы изменить вашу работающую версию в считанные секунды: а) более чем окупят первоначальные затраты времени и б) сохранят задницу, когда что-то пойдет не так.
Однако, чтобы напрямую ответить на ваш вопрос, если бы вы делали это вручную, я бы порекомендовал процесс, подобный этому (со вставленным sudo, где это необходимо):
- Иметь каталог
/opt/my_app/
с несколькими подкаталогами, содержащими разные версии, и "текущую" символическую ссылку на любую живую.
- Укажите вашу конфигурацию apache на
/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 за это. Если бы вы делали это вручную, вы могли бы включить в свой проект пару сценариев оболочки, чтобы обновить базу данных и откатить ее соответственно, но сохранить правильность версионирования было бы довольно сложно, поскольку они были бы характерны только для одной конкретной версии. , Я бы порекомендовал использовать существующую систему, такую как Migrations (которую можно использовать отдельно от Rails - я видел ее как единственный компонент Ruby в некоторых проектах на основе Java), или задать это как отдельный вопрос.