Вы здесь

Главная

Инструкция как успешно проапгрейдить сайт Drupal 6 на Drupal 7

Статья о том, как я обновил сайт http://it-basic.ru с Drupal 6 до Drupal 7

При этом перенеслись ноды (заметки, статьи) с картинками, пользователи, комментарии, меню. У всех материалов сохранились URL и связь друг с другом.

Не перенеслись таксономия – возникают ошибки. Views не пробовал. Инструкцию также можно использовать для переноса контента с Drupal 6 на Drupal 6 а потом 7.

Лирическое отступление

Прошёл уже почти год, с момента как был выпущен Drupal 7. Одно из его преимуществ – удобный интерфейс пользователя. Многие владельцы сайтов, работающих на Drupal 6 попробовали проапгрейдится на Drupal 7 но с толкнулись с различными проблемами, и были вынуждены остаться на старой версии. Я тоже несколько раз пробовал осуществить апдейт. Читал инструкции на форумах Drupal, спрашивал специалистов, и задача казалась сложно выполнимой. Складывалось впечатление, что справится с этим могут только очень опытные админы-программисты. Тем не менее, я разобрался и сумел обновить версию на этом сайте, и ниже вы найдете подробную инструкцию.

Весь апгрейд я делал на домашнем компьютере на копии сайта. И уже проапгрейженый сайт перенес обратно на хостинг.

Копию базы я делаю программой Sypex Dumper 2.0.8

Сейчас уже вышла версия Sypex Dumper 2.0.9. Она абсолютно бесплатна, и скачать ее можно тут http://sypex.net/ru/products/dumper/downloads/

Это программа, которой должен уметь пользоваться каждый админ сайтов, так как с помощью нее можно копировать и переносить MySql базы данных для любых CMS. Не только для Drupal но и для Wordpress, Jumla, форумных движков. На сайте разработчика есть инструкция как пользоваться программой. От себя добавлю только, что перед тем как вы импортируете копию базы данных на сайт, удалите базу данных и создайте ее заново. Потому, что она не переписывается полностью. Я рекомендую делать бэкап базы данных Drupal с помощью Sypex Dumper каждый раз перед установкой модулей. Потому, что бывает, что вы ставите модуль, он криво ставится, а удалить его корректно не получается. Вернее вы его удаляете, но если посмотреть в базу данных, то увидите там таблицы, созданные модулем.

Копию сайта Drupal устанавливаем на Denwer

Копию сайта я развернул на Denwer http://www.denwer.ru/. Это тоже очень популярный набор скриптов, который устанавливает веб сервер Apache, PHP 5.3.3, MySQL 5.1 на ваш компьютер, и вы можете локально работать с копией сайта. О денвере тоже много где написано, есть подробные инструкции как ставить и переносить сайты. Могу порекомендовать, после установки денвера изменить в файле PHP.ini, лежащем тут usr\local\php5 значения которые рядом со строкой max_execution_time на следующие:

max_execution_time = 300     ; Maximum execution time of each script, in seconds

max_input_time = 300  ; Maximum amount of time each script may spend parsing request data

;max_input_nesting_level = 64 ; Maximum input variable nesting level

memory_limit = 256M      ; Maximum amount of memory a script may consume (128MB)

Denwer и Drupal

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

Итак, предположим что вы сделали копию вашего сайта и установили ее на денвере.

На оригинале меняем что-нибудь (добавляем страничку,  или просто слово на страничку, чтобы отличать от копии). Также вам нужно на денвере дать имя вашему сайту абсолютно точно такое же как и имя оригинального сайта. То есть если ваш сайт называется http://site.ru то именно так и должна называться папка где лежит копия сайта на денвере. То есть site.ru. В ней должна быть папка www, а уже в ней копия вашего сайта иначе при обновлении возникают проблемы. Да, я знаю, что у все кто пользуется денвером скажут, что сайт можно создавать с другим именем, и я тоже создал папку не site.ru а site2.ru и посередине апгрейда увидел, что вдруг в браузере вместо сайта site2.ru у мен открыт site.ru и на нем запущен скрипт апгрейда. Поэтому, называем папку с тем же именем что и ваш сайт. Выключаем денвер. Перезагружаем компьютер. Ничего не открывая запускаем денвер. Открываем в браузере ваш сайт и смотрим, что на нем нет тех небольших изменений отличающих его от оригинала. Далее работаем с локальной копией сайта на денвере.

Перед обновлением до Drupal 7

Перед обновлением до Drupal 7, если вы знаете английский, рекомендую прочитать эти статьи

http://drupal.org/documentation/upgrade/6/7

http://www.ostraining.com/blog/drupal/migrate-drupal-6-to-drupal-7/

Я их прочел и делаю процедуру апгрейда по ним, но с российской спецификой и парочкой своих нюансов.

Смотрим версию вашего сайта. У меня Drupal 6.16

Отключаем, а затем удаляем (деинсталлируем)  (admin/build/modules/uninstall)  все модули кроме Core. Меняем тему на Garland (admin/build/themes). Переводим сайт в режим обслуживания (admin/settings/site-maintenance). Делаем английский язык по умолчанию и удаляем русский (admin/settings/language). Последний пункт крайне важен.  

Теперь если сайт не последней версии Drupal 6, его лучше обновить до последней версии шестерки. На момент написания статьи 6.22.  Я не стал.

С помощью Sypex Dumper делаем экспорт определенных таблиц

comments

menu_* с вложенными таблицами

node

node_* с вложенными таблицами

role

url_alias

users

users_roles

variable

 

таблицы permition, views и blocks я переносить не стал.

Я пробовал перенести таксономию, экспортируя и term_* с вложенными таблицами  но у меня возникли в дальнейшем ошибки и словарей и терминов на семерке я так и не увидел. Например возникает ошибка

"Debris left over after upgrade from Drupal 6"  

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

Почему экспортируем не все таблицы?

Sypex Dumper пример импорта

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

Итак у нас есть бэкап определенных таблиц с нашего сайта.

Удаляем все содержимое нашего локального сайта, то есть все в каталоге www. Копируем туда дистрибутив Drupal 6.22 Английский (обязательно английский, русскую локализацию не используем). Иначе в дальнейшем словите ошибку:

Warning: Cannot use a scalar value as an array in  \modules\locale\locale.module on line 680

Обращаемся к сайту по имени - запустится установка Drup 6.22. Русскую локализацию не ставим (это важно).

 

После того, как установится свежий друпал, с помощью Sypex Dumper импортируем в него бэкап определенных таблиц, сделанных ранее. Вы можете поброузить сайт – на нем должны быть страницы с вашего оригинального сайта. Меню не отображаются, так как они не связанны с блоками (блоки мы не переносили). Страницы имеют правильные URL. Перенеслись пользователи и комментарии. Картинки не отображаются (могут в некоторых браузерах отобразиться закэшированные копии). С сайтом тут ничего не делаем, просто убеждаемся что все ок.

 

Далее,  удаляем все файлы кроме sites/default/settings.php. В этом файле есть информация какую MySql базу использует наш сайт.

Обновление Drupal 6.22 до Drupal 7.9

Копируем в www внутри site.ru дистрибутив Drupal 7. В моем случае это Drupal 7.9. Русскую локализацию не ставим.

 

Открываем страницу по адресу http://имя_сайта/update.php

Начинается обновление. Так как у нас свежеустановленный Drupal 6.22, чистый, без следов доп модулей, обновление проходит успешно.

Сайт после обновления  будет очень похож по внешнему виду на Drupal 6. Пусть это вас не смущает. После того, как вы поменяете тему на Seven и включите модули Dashboard, Toolbar, Overlay, вы узнаете семерку . Вот тут admin/reports/status можно убедиться что версия 7. В моем случае Drupal 7.9. Тему сайта пока ставлю Bartik, тему админки Seven.

Настройки после обновления

Выставляем правильно страну и временную зону тут admin/config/regional/settings

Включаем модуль locale, и вот тут #overlay=admin/config/regional/translate/import загружаем русский перевод интерфейса, предварительно скачанный отсюда http://localize.drupal.org/

И переименованный в ru.po. В выпадающем списке ДО импорта указываем Russian и нажимаем кнопку Import.

Терпеливо ждем несколько минут. Ничего не нажимаем. У меня импортировало 4 минуты и обновило экран.

Далее тут #overlay=admin/config/regional/language указываем русский как язык по умолчанию.

Делаем logout и входим снова – панель станет русской

Если буквы в панели кракозябрами,  прописываем в .htaccess в самом начале

AddDefaultCharset UTF-8

Копируем картинки с копии сайта в sites\default\files

Зайти сюда admin/structure/types в Страница и Заметка и указать какие меню возможны для этих типов документов. В настройке темы указать куда выводить меню. Появятся меню.

 

Заметил что одна заметка криво выглядит – вместо текста вижу ее HTML содержимое.

Копирую и загружаю дополнительные модули. В частности CKEditor. Настраиваю модуль и пересохраняю заметку с форматом текста FullHTML. Все ОК.

Сайт обновлен!

После этого получаем готовый сайт на Drupal 7 в который перенеслись ноды (заметки, статьи) с картинками, пользователи, комментарии, меню. У всех материалов сохраняется URL и связь друг с другом. Остается только установить нужные модули, создать словари таксономии, термины. Привязать их к материалам. Создать Views. Сделать красивый шаблон.

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

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


 

Вход на сайт
Счётчик