Как я могу использовать Subversion для развертывания веб-приложений? - PullRequest
5 голосов
/ 27 апреля 2009

Мы небольшая команда из 4 разработчиков, работающих над веб-приложением. Мы используем trac + svn на общем сервере для контроля версий и создания билетов, и мы счастливы и удовлетворены этим. На этом же общем сервере также размещается наше веб-приложение. Само приложение представляет собой приложение Perl CGI, которое использует CGI :: Application и умеренное количество стандартных (CPAN) и пользовательских модулей Perl, которые устанавливаются в обычном (/ usr / lib / perl ...) и нескольких необычных местах ( / Главная / пользователь / Библиотека / Perl ..). Несмотря на то, что общие сведения могут быть неактуальными, наиболее важным моментом является то, что расположение / расположение библиотек на наших машинах разработки отличается от расположения на производственном (общем) сервере . Мы должны жить с этим как данностью. Макет библиотеки одинаков на всех машинах разработки.

Вот типичный, но явно неоптимальный рабочий цикл, за которым мы с коллегами следуем:

  1. Код и тестирование на разрабатываемых машинах
  2. Оформить / Принять / обновить наш код на SVN
  3. Периодически "svn export" на соответствующий DocumentRoot сервера
  4. Вручную отредактируйте экспортированное дерево, чтобы установить библиотеки, соответствующие макету библиотеки на сервере.
  5. Тестировать приложение на живом сервере, собирать билеты друг для друга
  6. Перейти к 1

Очевидно, что должен быть лучший способ, и он был бы рад услышать мнение других, которые могли бы справиться с этим лучше, чем мы. Например, есть ли способ svn export и автоматическое исправление местоположений библиотеки? Или есть какой-то совершенно другой способ справиться с этой ситуацией, чем мы делали до сих пор.

Спасибо за внимание

Ответы [ 6 ]

4 голосов
/ 27 апреля 2009

У вас должны быть скрипты, которые делают это для вас, и которые можно запустить из локального ящика. Мой всегда выглядит примерно так:

$> checkout from source or copy from working
$> run sed/perl -pi/copy to convert configs to the production values 
     (ie cp production.config myconfig)
$> upload to web server (rsync/ssh/ftp/etc)
$> ssh $SERVER migrate_db, set permissions, run unit tests, etc

Последний требует доступа по ssh, который я всегда ищу, но все остальное можно сделать локально. Обычно у вас есть набор конфигураций dev и набор рабочих конфигураций (или скрипт для преобразования из dev в production

Загрузка за один шаг - это всегда действительно хорошая идея.

3 голосов
/ 27 апреля 2009

Сохраните файл конфигурации (например, config.pl), в котором хранятся все системные зависимые пути и переменные. Затем установите для этого файла свойство svn: ignore , чтобы оно никогда не фиксировалось. Это позволит вам легко хранить скрипт локальной конфигурации для каждой системы, отделенной от дерева коммитов.

2 голосов
/ 27 апреля 2009

Если у вас нет возможности зеркалирования вашего сервера разработки в работе, почему вы не можете зеркалировать свой рабочий сервер в разработке? Это может потребовать некоторой перенастройки, но каков риск? Все проверено в SVN.

Но, может быть, это действительно, на самом деле не вариант для вас. Я предпочитаю развертывать веб-приложения, чтобы сделать svn checkout, а затем запустить скрипт символической ссылки. Идея состоит в том, что вы пишете систему правил, которая логически отображает содержимое одной папки на содержимое другой. Конечно, если вы удаляете символьные ссылки на папки в корне документа, вы должны указать Apache следовать им.

Честно говоря, самый безопасный сценарий - настроить виртуальную машину, которую вы можете настроить точно так же, как ваша рабочая машина. Таким образом, вы можете на самом деле протестировать содержимое вашего сценария развертывания и отправить заявки. Затем, когда проблема обнаружена, вы изменяете скрипт , чтобы повысить вероятность того, что развертывание разработки будет следовать новой и улучшенной процедуре.

И, как примечание: я предпочитаю использовать svn checkouts вместо экспорта svn. Это не должно быть сложно (особенно если вы используете сценарий развертывания), чтобы убедиться, что apache или любой другой веб-сервер не имеет разрешения на папки .svn. В идеале все, что вы можете сделать, чтобы сделать svn-откат однострочной командой, является абсолютно ключевым.

1 голос
/ 08 июля 2010

Codesion предлагает подрывную деятельность корпоративного уровня и отслеживание по требованию. Кроме того, теперь у нас есть возможность одним щелчком мыши опубликовать / развернуть ваш код с помощью ftp, scp, rsync и многих других методов. Это будет простой и быстрый способ выполнить то, что вы пытаетесь сделать.

Ознакомьтесь с нашими функциями Codesion Publisher:

https://help.codesion.com/View.jsp?procId=01fabe5e83381dda4edda959b97b2c5b

1 голос
/ 28 апреля 2009

Для части ручного редактирования у меня будет отдельная ветка в Subversion для локальных изменений, которые вам нужны. Разработчики обязуются выполнять транкинг, и когда вам нужно развернуть, используйте 'svn merge' или svnmerge.py, чтобы объединить изменения из транка в ветвь.

После первого создания ветки внесите туда свои локальные изменения.

На серверах каталоги в DocumentRoot и / usr / lib / perl и / home / user / lib / perl должны быть извлечены из ветви из Subversion.

Не используйте экспорт svn, просто оформите заказ, чтобы вы могли 'cd / usr / lib / perl; svn up '.

Единственное, о чем следует быть осторожным, это не подвергать свои каталоги .svn в DocumentRoot, используйте это:

# Prevent any access to .svn directories.
<DirectoryMatch "^/.*/\.svn/">
    Options None
    AllowOverride None
    Order allow,deny
    Deny from all
</DirectoryMatch>

Наличие рабочих копий, развернутых в DocumentRoot, также хорошо, если вам нужно откатить изменение, просто 'svn up -r PREV'.

1 голос
/ 27 апреля 2009

Если это ящик для Linux, вы можете написать работу cron, чтобы позаботиться об этом за вас. Вы можете использовать sed / awk для замены необходимых строк в коде, а экспорт svn отлично работает из задания cron. Вам нужно будет поддерживать скрипт, но он кажется быстрее, чем делать это каждый раз вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...