Подтвердить что ты не робот

Несколько сайтов с кодовым кодом

Мы разработали систему, которая использует единую базу кода, состоящую из четырех проектов Visual Studio с веб-сайтом администратора и веб-сайта, ориентированного на клиента (каждая система имеет собственную базу данных MS SQL).

Это отлично работает, так как все новые веб-сайты (включая администратора) ссылаются на одни и те же базовые проекты кода из SVN, поэтому любые изменения, внесенные в базу кода, затем доступны для всех веб-сайтов.

Каждый веб-сайт имеет другую главную страницу и различные пользовательские элементы управления (.ascx) и, следовательно, частично отличается, хотя основное кодирование по сайтам одинаковое.

Проблема, с которой мы сталкиваемся сейчас, - это ошибка, изменение функции или новая функция, которую мы должны реализовать во всех сайтах отдельно (как для администратора, так и для сайта клиента). Который начинает приводить нас в безумное состояние, а также означает, что у нас есть ОГРОМНЫЙ край ошибки для реализации изменений.

Я думал об использовании svn: externals, но это станет беспорядочным.

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

Я думаю, что хороший обзор будет заключаться в том, что разметка совершенно различна для каждого сайта (кроме сайта администратора, который является просто изменением темы), но базы кода одинаковы.

Каков наилучший способ управлять этим или мы застряли, делая много копий и вложений?

ИЗМЕНИТЬ

В каких точках вы хотели бы получить ясность?

Проблемы, возникающие, например, на странице JavaScript различаются, HTML-макеты могут быть совершенно разными на сайтах. Но код для страниц тот же.

Поэтому мне нужно будет "синхронизировать" файл и папку, например, найденные в app_code, но есть и проблемы здесь.

Сайт 1 и сайт 2 могут быть точно такими же, просто другой темой. У сайта 3 есть и другая тема, но у него также есть код на заказ, который требуется только на этом сайте, некоторые из кода в app_code также действуют по-разному на сайт 1 и сайт 2

Теперь я мог бы легко достичь этого с помощью ветвления, но при слиянии с новыми ветвями, если есть различия в коде, тогда будут серьезные конфликты.

Слияние также станет большой задачей и займет слишком много времени, так как нам потребуется объединить только определенные папки и файлы, хотя вы не можете объединить один файл через ветку (это может быть неправильно).

Например:

В корневой папке есть файл download.aspx, который возвращает поток как ответ, а не страницу, это используется для ввода всех запросов на загрузку через систему.

Итак, эта страница на сайте 1 и на сайте 2 одинакова, но на сайте 3 она делает что-то дополнительное, чего не требуется или нуждается какой-либо другой сайт.

Мы не хотим, чтобы эта функция, сделанная на заказ, была перегрузкой, так как мы не хотим/не нуждаемся в ней для других веб-сайтов, теперь мы больше не можем слить этот файл с веб-сайта мастера, он должен быть вручную объединен.

Надеюсь, что это лучше объясняет, чего я пытаюсь достичь.

EDIT 2

Основная структура сайта

|- App_code
|- App_Themes
|- Bin
|- Content
|     |- Flash
|     |- Images
|     |- Scripts
|     |- Uploaded
|
|- Controls
|     |- MasterPage
|     |     |-MasterPageControls
|     |
|     |- Navigation
|     |- Search
|     |- Templates
|     |     |- Control Templates 
|     |     |- Page Templates
|     |
|     |- WebServices
|     
|- Errors
|

Все под контролем Навигация, Поиск, Шаблоны являются .ascx файлами.

В корневом файле есть несколько файлов, включая default.aspx, download.aspx и preview.aspx

Это основные страницы сайта (игнорирующие страницы ошибок), все страницы динамически создаются из БД.

В папке "Управление" находится большинство изменений между веб-сайтами в MasterPage и всех других пользовательских элементах управления.

4b9b3361

Ответ 1

Я столкнулся с этой точной проблемой несколько месяцев назад, когда мы начали значительно переписывать наше веб-приложение. У нас было две отдельные версии почти одинаковых сайтов. Внутренний код был на 99% идентичен, в то время как JavaScript, CSS и другие элементы интерфейса были совершенно разными. У нас были эти два сайта в отдельных сундуках в том же хранилище SVN, и вскоре он стал кошмаром копирования и вставки общего кода между ними. Патч и слияние были слишком болезненны, чтобы быть полезными из-за небольших изменений в файлах.

Наше решение не было связано ни с SVN, ни с построением общей библиотеки. Вместо этого концепция отдельного сайта определяется в одной базе кода через несколько файлов конфигурации и иерархию файлов CSS, изображений и языковых ресурсов. Специфичные для сайта функции включаются значениями конфигурации.

Каждый сайт получает уникальное имя (например, "foo" и "bar" ), которое извлекается из файла Web.config во время выполнения. Имя используется для определения того, какой файл конфигурации загружен и какие файлы на стороне клиента использовать. Параметр пуст в SVN. Он устанавливается нашими сценариями развертывания при копировании на веб-серверы. На наших локальных машинах разработки переменная среды определяет сайт, с которым мы хотим работать.

Файловая структура файлов, относящихся к конкретному сайту, будет выглядеть так:

|- Config
|     |- AppSettings.foo.config      <- overrides Web.config AppSettings for "foo" site
|     |- AppSettings.bar.config      <- overrides Web.config AppSettings for "bar" site
|- Content
|     |- CSS
|          |- main.css               <- default CSS file for all sites
|          |- main.foo.css           <- CSS overrides for "foo" site
|     |- Images
|          |- logo.jpg               <- default logo
|          |- logo.foo.jpg           <- logo used if site name is "foo"
|          |- logo.bar.jpg           <- logo used if site name is "bar"

Это отлично поработало для нас. Добавление новой функции на конкретный сайт так же просто, как добавление этой функции в нашу базу кода и ее включение только для этого сайта.

Ответ 2

Я не уверен, что правильно понимаю вашу ситуацию, но вы можете найти подсказки о том, как поддерживать репозиторий SVN в книге Subversion, в главе 4.

Кажется, вам либо нужно установить хорошие процедуры для дерева SVN, либо вам нужно изменить код, чтобы как можно больше было общим для всех веб-сайтов, причем различия были настраиваемыми. Например, вы можете создать основной проект с помощью агностического кода сайта, а затем закодировать изменения как проекты, которые строятся поверх него.

Что касается обновления самих сайтов, это должно быть выполнено путем синхронизации с соответствующими точками в дереве subversion или вам нужно выполнить новую версию (или обновление).

Ответ 3

Вы говорите, что у вас есть одно SVN-репо с базой кода для всех сайтов. Итак, если я не понимаю, не можете ли вы просто переместить какие-либо общие компоненты в этот репозиторий?

Такие вещи, как упоминаемый на странице Javascript, должны быть сделаны по возможности внешними. Если макеты HTML совершенно разные, скорее всего, Javascript может существенно отличаться.

Таким образом, эта страница на сайте 1 и на сайте 2 одинакова, но на сайте 3 она делает что-то дополнительное, чего не требует или нуждается какой-либо другой сайт. Мы не хотим, чтобы эта функция на заказ была перегрузкой, поскольку мы не хотим/не нуждаемся в ней для других веб-сайтов.

Нельзя ли расширить код загрузки на сайте 3, поэтому у вас есть общая база для всех сайтов, но расширьте ее на сайте 3.

Ответ 4

Если я правильно понял проблему, у вас есть код для четырех широко похожих сайтов в одном хранилище. У экземпляра веб-сайта есть пользовательские функции. Пунктир в оригинальной публикации, вопрос, выражает озабоченность по поводу того, что "застрял, делая много копий и вложений". В разных точках вы указываете разочарование "слиянием" и "ручным слиянием".

Я так понимаю, вы используете svn для распространения нового кода на четыре хоста.

Возможно, ваша кодовая база приближается к точке, где обычный материал может быть скупаем как библиотека. В этом представлении каждый из четырех сайтов считается приложением, созданным из библиотеки. Если это так, то имеет смысл дать каждому из четырех приложений свое собственное репо в подрывной деятельности. Усилия по развитию будут заключаться в том, чтобы отделить общие функции от пользовательских функций, возможно, превратив API в "библиотечный" код немного более четко. Затем каждый хост проверяет код библиотеки и собственное приложение.

Это близко к тому, о чем вы думаете?

Ответ 5

Как и другие, я немного смущен относительно вашей проблемы, но я думаю, что у меня общее понимание проблемы. В этом случае вам нужно попытаться сделать абстрагирование настроек в отдельные библиотеки на клиент/проект и оставить исходную кодовую базу нестандартной. Базовый код должен содержать только общую функциональность, применимую ко всем сайтам (хотя некоторые функции могут быть изменены, чтобы вы могли переключать ее доступность в зависимости от необходимости).

Если вы все сделаете правильно, вы сможете в любой момент экспортировать/опубликовать исходную базу кода на любой данный сайт и не испортить работу. Любые настройки должны оставаться неповрежденными.

Ответ 7

Три мысли, в порядке возрастания полезности и усилий:

1) Хостинг в "разметке совершенно по-разному для каждого сайта (кроме сайта администратора, который является просто изменением темы), но базы кода одинаковы".

Сколько "кода" можно переместить в проект DLL, который будет использоваться совместно? Если это почти все, то вы можете поддерживать отдельные проекты для каждого из наборов разметки, и они будут использовать DLL в качестве ссылки.

Очевидно, если у вас есть много кода, который не в AppCode, это вообще не будет осуществимо. Если нет, это может быть быстрый путь к меньшему безумию.

2) Можно ли сохранить репозиторий для общего кода с отдельными репозиториями для каждого из Сайтов? Затем вам нужно создать собственное развертывание script, чтобы обработать извлечение исходного кода из правильных репозиториев и поместить его в нужные места.

В зависимости от того, насколько сильно связан код/​​разметка, это может оказаться невозможным.

3) Наконец, как насчет перемещения разного кода в базу данных и создания приложения при развертывании?

Очевидно, что наиболее активное участие, но оно позволяет вам, где вы хотите быть.

Ответ 8

Я собираюсь начать с благодарности каждому за вклад.

Теперь я решил (более или менее) проблему.

То, что я сделал, - это перемещение всех изображений в папки "Темы", а также создание вложенных папок в шаблонах и управляющих папках, в которых будут храниться элементы управления на заказ. Я уже создал некоторые функции в схеме базы данных, которые дали мне руку помощи вместе с этим.

В моем предпланировании системы было много всего, что я полностью не реализовал и забыл.

Я также выделил часть кода, например, для веб-сервисов, а также для веб-сервисов, которые могут выжить сами по себе.

В совокупности мы добрались до решения, поэтому я не уверен, кому вручить баллы?