Як мені керувати спільною розробкою на Drupal-сайті?


12

Я працюю з іншим розробником на сайті Drupal. Ми намагалися знайти хороший спосіб працювати над різними частинами сайту одночасно, не вдаючись один до одного. Ми намагалися працювати над одним і тим же екземпляром розробки сайту, але ми часто наступаємо один на одного пальцями ніг або збиваємо сайт з поганим кодом, що унеможливлює роботу інших, поки це не вирішено. Тож ми перейшли до окремих екземплярів розробки. Але зараз великий біль об’єднати нашу роботу в єдиний екземпляр сайту. Ми в основному переробляємо все на спільній копії.

Найбільшою проблемою, яку ми маємо зараз, є те, як ми зливаємо зміни бази даних, і як ми включаємо базу даних у нашу систему управління джерелами? Файли прості, просто відстежуйте їх усі (ми використовуємо git) і об'єднуємо нашу роботу, вирішуючи конфлікти там, де це потрібно. Але це насправді не працює з базою даних. Ми можемо взяти дамп SQL і включити його в наш сховище git, але ми не можемо дійсно об'єднати бази даних. Модуль функцій трохи допомагає, дозволяючи нам експортувати частину нашої бази даних в код, який потім можна переосмислити та об'єднати. Однак навіть близько до всього не підтримується Особливості. Так...

  • Які кроки ми можемо зробити, щоб легко об'єднати зміни в нашій базі даних?

  • Як ми маємо версію бази даних (це хороший спосіб зробити файл дампа в git)?

  • Чи є модулі, які допомагають вирішити деякі з цих проблем?

  • Або ми застрягли в роботі над тією ж копією сайту? (будь ласка, ні)


Редагувати: У коментарях ми обговорювали, які речі не можна експортувати за допомогою функцій, і однією з них були таксономії. Є ще одне питання, яке стосується цього .


Мені цікаво, що конкретно не можна зробити за допомогою функцій? Кращим питанням може бути запитання, як експортувати ці речі в код із функціями або без них, а не спускатися по маршруту злиття бази даних.
Розшифруйте

@Decipher Я можу придумати прапори, систематику, меню, блоки та фактичний вміст (хоча, я вважаю, є й інші модулі, які роблять це) ... я думаю, було б нереально написати власний код для експорту цих речей. Тоді кожен раз, коли я хочу використовувати новий модуль, який не підтримує функції, я повинен спершу додати його. У мене немає часу цим займатися.
Chaulky

Я думаю, що ми повинні зробити спринт "Особливості" на Drupalcon, щоб спробувати додати підтримку деяким речам, які відсутні.
coderintherye

1
@Decipher Добре, тож я погоджусь з вами, що існують способи зберігання всіх блоків у коді. Але я все ще вважаю, що не потрібно додати підтримку функцій до кожного модуля, який я хочу використовувати, у якого його ще немає.
Chaulky

1
Я ніколи цього не пропонував, я просто припускаю, що вже є підтримка модулів, які ви запропонували (якщо припустити, що Прапор експортується через Strongarm). Я не намагаюся змусити вас пройти цей шлях, це просто альтернатива йти більш важким шляхом, простіше підтримувати підхід на основі коду в команді, ніж підхід до бази даних. У своїй команді я настійно переконую підходи, які не відповідають особливостям / коду, де можна. Я усвідомлюю, що існує багато речей, на які Feature не зможуть, поки це не є основною частиною Drupal, але вона може зробити багато.
Розшифруйте

Відповіді:


5

Це зміна робочого процесу, але вам слід звикнути працювати над свіжим скидом живої БД. Існує три способи внесення змін у БД.

  1. Особливості. Це не спрацює для всього, але буде для багатьох необхідних речей.
  2. оновити гачки. Коли функції не працюватимуть, ви можете важко закодувати речі в гачок оновлення вашого модуля.
  3. Зміни вручну. Використовуйте економно. Деякі речі не надходять звичайно до функцій або оновлених гачків і їх набагато простіше зробити вручну. Це в крайньому випадку, але іноді це єдиний піратський спосіб.

Якщо можеш. Декілька разів на день отримуйте свіжий відвал і тестуйте свою збірку, у вас виникне менше проблем з інтеграцією.


4

Я відповів на подібне запитання і збираюся трохи змінити його, щоб відповісти на ваше запитання тут. Моя коренева пропозиція полягає в тому, що у вас є сервер розробки / постановки, де зміни коду перевіряються за допомогою системи безперервної інтеграції (наприклад, кожні 5 хвилин). Таким чином, на вашій локальній машині ви працюєте лише над одним запитом / помилкою про помилки, одночасно чітко розмежовуючи це завдання від інших, над якими люди можуть працювати, і повідомляєте вашим товаришам по команді, що ви працюєте над ним (Redmine або інше відстеження помилок для цього чудово підходить). Потім ви регулярно здійснюєте зміни, і вони перетягуються на сервер розробки / постановки, як це роблять ваші товариші по команді. В ідеалі, у вашій системі безперервної інтеграції вбудовані одиничні тести (настійно рекомендую для цього, наприклад, luntbuild або QuickBuild, але Хадсон також працює). Система CI або тести можуть автоматично виявити будь-які конфлікти, які ви могли ввести, як тільки ви зареєструєте свій код. Якщо вам потрібно внести зміни до вмісту (без коду), зробіть це на сервері розробки / постановки.

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

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

2) Використовуйте модуль "Особливості", як згадував budda, для налаштувань адміністратора та використовуйте модуль експортування вузлів для експорту / імпорту вмісту в поєднанні з модулем "Видалити все". Отже, робочий процес такий:

використовувати node_export та функції для експорту вузлів / функцій у файли Необов'язково (і, сподіваємось) контроль версій Завантаження файлів у системі prod Використовуйте інтерфейс drush або адміністрування для завантаження функцій Використовуйте інтерфейс для видалення drush або інтерфейс адміністратора для видалення всіх вузлів типів, які ви хочете імпортувати Використовуйте drush ne-import або адміністраторський інтерфейс для імпортування вузлів із експортованого файлу вузлів. Одне зауваження, я б настійно пропонував прийняти стандартний робочий процес, де вміст йде лише в одному напрямку. Або Dev -> Prod або Prod -> Dev (я віддаю перевагу цьому).

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


0

Хоча це старе питання з прийнятою відповіддю, я вважаю, що ще є місце для іншого.

По-перше, дозвольте сказати наперед, що я не думаю, що Особливості є правильним інструментом для цього завдання, і я запропоную альтернативний набір інструментів.

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

Система SCM дозволяє членам групи працювати паралельно над різними гілками коду, не заважаючи один одному. На тестувальному сервері для тестування розгортається лише головна гілка.

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

Скинути:

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

Відновити:

mysql -u root -p < DUMP.sql

Якщо ваша не єдина база даних на цьому сервері, скриптуйте якусь версію mysqldump(або еквівалент, якщо ви не використовуєте mysql ), яка скидає лише ваші бази даних.

Складіть політику, що це база даних на виробничому сервері. Постановочний сервер і робочі станції повинні бути копією виробничої бази, а не навпаки.

Зауважте, що Drupal 7 зберігає всі налаштування адміністратора в базі даних. Це означає, що дзеркальне відображення бази даних між виробничим майданчиком, веб-майданчиком та робочими станціями буде мігрувати налаштування адміністратора без функцій .

Тепер для спільного використання коду:

Стандартним способом обміну кодом між членами команди розробників є використання системи SCM. Drupal, за замовчуванням, керується за допомогою такої системи під назвою git .

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

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

Зазвичай при деякому сердечному спілкуванні про те, як розподіляються завдання між членами колективу, конфліктів не буде. Але коли система SCM веде облік речей, конфлікти стають керованими, навіть якщо помилки чи комунікація не вдається.

Існує багато навчальних посібників щодо початку роботи та використання git (GIYF). Я рекомендую два: веб - сайт git-scm та Pro Git від Скотта Чакона.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.