Как мне управлять совместной разработкой на сайте Drupal?


Я работаю с другим разработчиком на сайте Drupal. Мы изо всех сил пытались найти хороший способ работать над разными частями сайта одновременно, не мешая друг другу. Мы пытались работать над одним и тем же экземпляром разработки сайта, но мы часто наступаем друг другу на пятки или выводим сайт из строя с помощью какого-то плохого кода, что делает невозможным продолжение работы другого до тех пор, пока он не будет решен. Поэтому мы перешли к отдельным экземплярам разработки. Но теперь это большая больно объединять нашу работу в один экземпляр сайта. В основном мы заканчиваем тем, что переделываем все в общей копии.

Самая большая проблема, с которой мы сталкиваемся сейчас, заключается в том, как мы объединяем изменения базы данных и как мы включаем базу данных в нашу систему управления версиями? Файлы просты, просто отслеживайте их все (мы используем git) и объединяйте нашу работу, разрешая конфликты там, где это необходимо. Но на самом деле это не работает с базой данных. Мы можем взять дамп SQL и включить его в наш репозиторий git, но на самом деле мы не можем объедините базы данных. Модуль функций немного помогает, позволяя нам экспортировать часть нашей работы с базой данных в код, который затем можно версировать и объединять. Однако даже близко не все поддерживает функции. Итак...

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

  • Как мы должны версировать базу данных (является ли размещение файла дампа в git хорошим способом сделать это)?

  • Существуют ли какие-либо доступные модули, которые помогают с некоторыми из них проблемы?

  • Или мы застряли на работе над одной и той же копией сайта? (пожалуйста, так что нет)


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

 12
7
Author: Community, 2011-03-03

3 answers

Это изменение рабочего процесса, но вам следует привыкнуть работать со свежим дампом живой БД. Есть три способа внести изменения в базу данных.

  1. Особенности. Это не будет работать для всего, но будет работать для многих вещей, которые вам нужны.
  2. крючки обновления. Когда функции не будут работать, вы можете жестко закодировать что-то в крючок обновления вашего модуля.
  3. Изменения вручную. Используйте экономно. Некоторые вещи не являются естественными для функций или крючков обновления, и их просто намного проще сделать вручную. Это последнее средство, но иногда это единственный пиратский способ.

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

 5
Author: Jeremy French, 2011-07-25 11:06:59

Я ответил на аналогичный вопрос и собираюсь немного скорректировать его, чтобы ответить на ваш вопрос здесь. Мое основное предложение заключается в том, что у вас есть сервер разработки/промежуточный сервер, на котором изменения кода проверяются с помощью системы непрерывной интеграции на регулярной основе (например, каждые 5 минут). Таким образом, на вашем локальном компьютере вы работаете только над одним запросом функции/сообщением об ошибке за раз, обязательно четко отделяя эту задачу от других, над которыми могут работать люди, и сообщая об этом вашему товарищи по команде, над которыми вы работаете (redmine или другое отслеживание ошибок отлично подходит для этого). Затем вы регулярно вносите изменения, и они переносятся на сервер разработки/промежуточного сервера, как и ваши товарищи по команде. В идеале у вас есть модульные тесты, встроенные в вашу систему непрерывной интеграции (кстати, настоятельно рекомендую для этого luntbuild или QuickBuild, но Hudson также работает). Система или тесты CI могут автоматически обнаруживать любые конфликты, которые вы могли ввести, как только вы зарегистрируете свой код. Если вам нужно внести изменения в контент (не код), вы делаете это на сервере разработки/промежуточного сервера.

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

1) Разверните, удалив производственную базу данных и импортировав mysqldump базы данных разработки. При необходимости, запустите регулярное выражение "найти/заменить" заранее для любых жестко запрограммированных абсолютных ссылок, которые ссылаются на разработчика URL-адрес в дампе SQL. После импорта базы данных dev в prod автоматически запустите инструкции SQL (обычно с помощью скрипта), чтобы впоследствии изменить любые настройки, которые отличаются для prod от dev (например, возможно, в таблице переменных у вас есть некоторые настройки подключения для подключения к внешним системам, которые вам нужно изменить, чтобы указать на внешние системы prod, а не на версию dev).

2) Используйте модуль функций, как упоминалось budda, для настроек администратора и используйте модуль экспорта узлов для экспорт/импорт содержимого в сочетании с модулем Удалить все. Итак, рабочий процесс таков:

Используйте node_export и функции для экспорта узлов/функций в файлы Необязательно (и, надеюсь,) контроль версий Загрузка файлов в систему prod Используйте интерфейс drush или администратора для загрузки функций Используйте интерфейс drush delete-all или интерфейс администратора, чтобы удалить все узлы типов, которые вы хотите импортировать Используйте drush ne-импорт или интерфейс администратора, чтобы импортировать узлы из экспортированного файла узлов. Одно замечание, я бы настоятельно рекомендовал принятие стандартного рабочего процесса, в котором контент идет только в одном направлении. Либо Dev -> Prod, либо Prod -> Dev (я предпочитаю этот вариант).

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

 4
Author: coderintherye, 2011-03-03 01:01:51

Хотя это старый вопрос с принятым ответом, я считаю, что еще есть место для другого.

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

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

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

Для зеркального отображения базы данных между производственными, промежуточными и рабочими станциями существует модуль с именем Резервное копирование и миграция, который можно использовать, если вы находитесь на общем хостинге и не управляете своей собственной базой данных. Если вы управляете собственным сервером баз данных, это единственный проект на этом сервере, и вы используете mysql, вам пригодится следующая пара команд:

Для сброса:

mysqldump --all-databases --opt -u root -p > DUMP.sql

К восстановить:

mysql -u root -p < DUMP.sql

Если ваша база данных не единственная на этом сервере, напишите некоторую версию mysqldump (или эквивалентную, если вы не используете mysql), которая сбрасывает только ваши базы данных.

Создайте политику, согласно которой главной является база данных на рабочем сервере. Промежуточный сервер и рабочие станции должны быть копией производственной базы данных, а не наоборот.

Обратите внимание, что Drupal 7 сохраняет все свои настройки администратора в базе данных. Это означает, что зеркальное отображение базы данных между производственным сайтом, промежуточным сайтом и рабочими станциями будут перенесены настройки admim без функций .

Теперь, чтобы поделиться кодом:

Стандартным способом обмена кодом между членами команды разработчиков является использование системы SCM. Drupal по умолчанию управляется с помощью такой системы с именем мерзавец.

Git позволяет использовать локальные или удаленные репозитории. Если члены команды находятся в одном физическом пространстве, вы можете настройте локальное хранилище на промежуточном сервере. Если они распределены географически, вы можете настроить удаленное перемещение. Если вы не возражаете, чтобы другие имели доступ для чтения к вашему разрабатываемому коду, вы можете использовать песочница в Drupal.org в качестве удаленного хранилища. Вы также можете использовать область проекта на Гитхаб. GitHub является не только хранилищем, но и поставляется с некоторыми инструментами для совместной работы и позволяет как публичным, так и частным хранилища.

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

Обычно, с некоторым сердечным общением о как задачи распределяются между членами команды, конфликтов не будет. Но с помощью системы SCM, отслеживающей ситуацию, конфликты становятся управляемыми, даже если совершаются ошибки или не удается наладить связь.

Существует множество руководств по началу работы и использованию git (GIYF). Два из них я порекомендую: гит-скм веб-сайт и Профессиональный Мерзавец автор: Скотт Чакон.

 0
Author: Free Radical, 2014-03-31 04:37:00