Опыт обновления сайта до Drupal 7

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

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

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

Следует начать с того, что к обновлению я начал готовиться за несколько месяцев.

Постепенно я отказался от модулей, которых по тем или иным причинам нет для Drupal 7, найдя им достойные альтернативы.

Затем я установил все возможные обновления на сам Drupal 6 и модули. Это можно сделать, как используя Drush, так и вручную.

У меня был выбор между использованием команды drush site-upgrade (Drush Site Upgrade), которая почти весь процесс обновления может сделать за меня, или обновлением вручную, используя пошаговое руководство UPGRADE.txt  и/или модуль Upgrade Status.

К моменту обновления я уже имел полную копию моего Drupal 6 сайта, развернутую на отдельном виртуальном хосте моей локальной машины. Тогда как команда site-upgrade требует создания альяса для сайта и в процессе обновления наполняет пустой сайт, что для меня было неприемлемо. Подробнее об использовании команды можно прочитать в блоге Acquia.

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

Итак, я остановился на модуле Upgrade Status и не был разочарован. Я смог посмотреть наличие Drupal 7 версий контриб модулей со статусами готовности (In core, Available, In Development и др.). Так же модуль снабжен под-модулем Upgrade Assist, который призван провести по шагам обновления, хотя им мне не пришлось воспользоваться.

Я пошел по шагам основной инструкции по обновлению UPGRADE.txt, которая находится в дистрибутиве Drupal 7.

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

/Цитата из описания модуля Meta tags/

Это означает, что пока не существует официально утвержденного способа апгрейда модуля Nodewords до Meta Tags.

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

Я воспользовался модулем Nodewords Migrate, который я нашел в ветке обсуждения. В этом же тикете можно найти описание того, как пользоваться модулем.

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

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

User error: Failed to load class for metatag dc.date. в функции metatag_get_instance()

Менялось лишь только имя мета тега.

Решил проблему ручным сохранением мета тегов для главной страницы и контентных нод, на которых встречались ошибки. Отмечу, node_save не решал проблему.

Апгрейд Syntax highlighter модуля

Казалось бы, все супер, ведь есть версия Syntax highlighter для D7. Радость моя продлилась не долго. После обновления я заметил, что код в статьях не подсвечивается. Прочитав внимательно информацию на странице проекта, понял что {syntaxhighlighter} тег в 7-ой версии не поддерживается. Вместо этого рекомендуют использовать тег <pre>.

Поискав решение на Drupal.org, я решил написать свой код для замены старого тега в нодах на новый. Так родилась
простая утилита {syntaxhighlighter} to PRE Converter.

Прошу пользоваться и оставлять свои отзывы в очереди задач проекта или в комментариях к анонсу модуля на drupal.ru.

В заключении я отвечу на вопрос, почему я обновился до Drupal 7. Вот несколько доводов:

  • Все чаще и чаще я слышу о восьмой версии и все
    реже о шестой, постепенно сообщество переключается на Drupal 7, как на основную версию. Я - часть сообщества и стараюсь поддерживать тренды.
    Анализируя графики использования модуля Yandex.Metrics, понимаю, что примерно 80% используют Drupal 7 версию.
  • Основные Drupal 7 темовые фреймворки идут с поддержкой HTML5 и мобильных устройств, такие как Zen, AdaptiveTheme, Omega и другие. Я интересуюсь разработкой для мобильных устройств, и поэтому мне важно иметь под рукой передовые инструменты.
  • Сюда же можно отнести все остальные преимущества Drupal 7, такие как Field API (CCK), Image Styles (ImageCache), новый административный интерфейс, работа с обновлениями, RDF и другие.