Обновление с Drupal 6 до Drupal 7: лучшие практики программиста? - PullRequest
18 голосов
/ 17 ноября 2009

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

Я знаю, что сообщество Drupal предложит много технической поддержки об измененных API и архитектурных изменениях (см. модуль Deadwood для D5-D6 или даже эти заглушки D6- Инструкции D7 для модулей и тем ).

Однако то, что я ищу в своем вопросе, больше относится к стратегическому мышлению , или, другими словами, Я ищу информацию и советы о том, как планировать / осуществлять / пересматривать процесс портирования моего собственного кода , в свете того, что коллеги-разработчики узнали из предыдущего опыта. Пример:

  1. Посоветуете ли вы начать портирование моих модулей, как только у меня будет время для этого, и поддерживать параллельный D7 в течение некоторого времени (так что я "готов" к дню) или посоветовать подождать дня, в который порт будет фактически неизбежным , а затем обновить модули до D7 и сбросить версию D6?
  2. Только некоторые из моих модулей имеют полное тестовое покрытие. Вы бы посоветовали завершить тестовое покрытие для версии D6, чтобы все тесты работали для проверки порта D7, или вы бы посоветовали написать мои тестовые указания во время портирования, чтобы протестировать версию D7?
  3. Считаете ли вы, что раннее внедрение дает вам преимущество в плане новых функций и улучшенных API, или вы скорее находите, что удобнее отложить преобразование, чтобы использовать большее количество легкодоступных модулей contrib?
  4. Вы установили для себя стандарты качества / критерии оценки или просто установили планку «если это работает, я счастлив»? Зачем? Если вы устанавливаете определенные стандарты или цели, что они были, где / что они будут? Как они вам помогли?
  5. Существуют ли распространенные ошибки, с которыми вы сталкивались в прошлом и которые, по вашему мнению, применимы к процессу портирования D6-D7?
  6. Портирование - хороший момент для некоторого рефакторинга, или это просто сделает все более сложным, чтобы собрать его вместе?
  7. ...

Эти вопросы не являются исчерпывающим списком, но я надеюсь, что они дают представление о том, какую информацию я ищу. Я бы скорее сказал: все, что вы считаете актуальным, а я не перечислил выше, получает «плюс»! :)

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

PS: Да, я знаю ... D7 еще не вышел, и пройдут месяцы, прежде чем важные модули contrib будут обновлены ... но никогда не рано начинать думать! :)

1 Ответ

16 голосов
/ 17 ноября 2009

Хорошие вопросы, так что давайте посмотрим:

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

  2. (тестовое покрытие)
    Обычно я бы сказал, что желательно иметь хорошее тестовое покрытие перед началом рефакторинга / портирования. Но, учитывая, что Drupal-7 вносит существенные изменения в среду тестирования, перенося ее в ядро, я ожидаю, что в любом случае потребуется переписать значительное количество тестов. Поэтому, если нет необходимости поддерживать версии Drupal-6 после миграции, я бы сэкономил время / проблемы и стремился к увеличению охвата после портирования.

  3. (ранний усыновитель и ожидание)
    Используя Drupal начиная с версии 4.7, мы всегда ждали по крайней мере первого официального выпуска новой основной версии, прежде чем даже думать о портировании. В Drupal 6 мы ждали модуля представлений, прежде чем портировать наш первый сайт, и у нас все еще есть несколько небольших проектов на Drupal-5, поскольку они работают просто отлично, и нашим клиентам будет сложно оправдать дополнительный счет, пока все еще есть исправления обслуживания / безопасности для этого. Так много времени в день, и всегда есть куча ошибок, которые нужно исправить, функции, которые нужно добавить, и т. Д., Так что бесполезно играть с незавершенными технологиями, в то время как есть более неизбежные вещи, которые могут немедленно принести пользу нашим клиентам. Теперь это, конечно, было бы по-другому, если бы нам пришлось поддерживать один или несколько «официальных» дополнительных модулей, поскольку было бы неплохо предложить ранний порт.
    Здесь я немного запутался - то, что ранний усыновитель, безусловно, приносит пользу сообществу, так как кто-то должен найти эти ошибки, прежде чем они могут быть исправлены, но, с другой стороны, бессмысленно бороться с ошибками час за часом другие могли бы найти / исправить, если бы вы просто подождали немного дольше. Пока я должен зарабатывать на жизнь, мне нужно следить за своими ресурсами, пытаясь найти приемлемый баланс между служением сообществу и извлечением из него пользы: - /

  4. (стандарты качества)
    «Если это работает, я счастлив», но это не значит, что я не хочу быть счастливым только на мгновение, но и завтра. Таким образом, один из моих стандартов качества заключается в том, что я должен быть (несколько) уверен, что я достаточно хорошо усвоил новые концепции, чтобы не просто заставить вещи работать, но и заставить их работать так, как они должны. Сейчас это трудно определить более точно, так как, очевидно, невозможно узнать, «кто-то получил», прежде чем «получить его», поэтому все сводится к интуитивному чувству / различению «да, это вроде работает» против «да» это выглядит правильно », и нужно признать, что он будет регулярно ошибаться по этому поводу.
    Тем не менее, один конкретный момент, на который я обращаю внимание, это «вмешиваться как можно раньше». Как новичок, я часто подправлял материал «по факту» на этапе создания тем, в то время как было бы намного проще применить «исправление» ранее в цепочке обработки с помощью одного крючка или другого. Так что сейчас, когда я собираюсь «что-то скорректировать» в слое темы, я намеренно беру небольшой тайм-аут, чтобы проверить, не может ли это быть сделано более чисто / совместимо в хуке раньше. Поскольку я ожидаю, что Drupal-7 добавит еще больше опций перехвата, на это я буду обращать особое внимание, так как обычно он уменьшает конфликты и внезапные «поломки» при добавлении новых модулей.

  5. (общие подводные камни)
    Хорошо - в основном, портирование на ранние версии, выяснение впоследствии / между тем, что один или несколько необходимых модулей вообще не были доступны для новой версии или только в состоянии dev / alpha / ранней бета-версии. Поэтому я должен сначала скомпилировать полный список используемых / необходимых модулей, перечислив их состояние портирования, а также быстро проверить их очереди выдачи.
    Кроме того, я до сих пор всегда был очень доволен новыми версиями и их улучшениями, и я с нетерпением жду появления Drupal-7.

  6. (рефакторинг при портировании)
    Можно сказать, что портирование само по себе является довольно большим рефакторингом, поэтому нет необходимости увеличивать его сложность путем реструктуризации не связанных с портированием вещей. С другой стороны, если вам все равно придется разбивать свои модули на куски, почему бы не использовать возможность сделать капитальный ремонт? Я бы попытался нарисовать линию, основанную на сложности - для больших / сложных модулей я бы сделал порт как можно более прямым и реорганизовал бы его позже, если потребуется. Для небольших модулей это не должно иметь большого значения, так как вероятность появления незначительных ошибок должна быть довольно небольшой.

  7. (прочее)
    ... нужно подумать об этом ...


Хорошо, другие вещи:

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

  • Сначала самые последние версии. Эта версия довольно очевидна и всегда подчеркивается в руководствах по обновлению, но, тем не менее, стоит упомянуть: сначала обновите ядро ​​и все модули до их последней текущей версии, прежде чем выполнять серьезное обновление, так как код обновления весьма вероятно, будет зависеть от последних таблиц / структур данных для правильной работы. Учитывая, что Drupals «пошагово», один шаг за шагом стратегии обновления, было бы очень трудно реализовать код обновления, который бы обнаруживал различные состояния перед обновлением и действовал соответственно.

...