Продолжаю цикл статей, посвященный увлекательному процессу обновления Joomla с 2.5 до 3 версии. Сегодня будет история, расказанная читателем данного сайта Раилем Усмановым. Я приведу нашу с ним переписку по email (надеюсь, Раиль не будет против), из которой будет видно, с проблемой какого масштаба ему пришлось столкнуться и как он ее решил.

Письмо 1

Артём, прошу прощения, что беспокою. Почитал ваши статьи по миграции. Каждая попытка обновиться на  joomla 3 через браузер заканчивается белый листом (показ ошибок в php.ini включен, отладка в Joomle включена в состояние development, параметры php.ini приведены в соответствии с рекомендациями с вашего сайта, однако ошибка не отображается ни на экране браузера, ни в логах php-fpm, mysql, nginх (причина либо в большом размере базы ~ 3 Гб, либо в том, что куча вебмастеров засрали joomla левыми пакетами)  Скачав архив обновления с 2.5.28 до 3.0 и изучив его содержимое (особенно файл joomla.xml) подумал, что быть может есть вариант обновиться руками через консоль? То есть, файлы архива переписать поверх файлов сайта и запустить sql скрипты из

<schemapath type="mysql">administrator/components/com_admin/sql/updates/mysql</schemapath>

Но там куча SQL файлов. Запускать их все или только 3.0.0.sql? Ещё внизу joomla.xml есть секция

<updateservers>

  <server type="collection">http://update.joomla.org/core/list.xml</server>

  <server type="collection">http://update.joomla.org/jed/list.xml</server>

  </updateservers>

Что она делает? Куда этот update.joomla.org прописывать или же с этой ссылки инсталлятор джумлы берёт какие-то файлы установки?

Мой ответ

Здравствуйте. Я сам последний раз эту операцию делал много лет назад (собственно, тогда и была написана статья), поэтому какие-то нюансы могли забыться. Тем не менее...

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

Во-первых, убедитесь, что версия php и mysql на хосте соответствует требованиями и 2.5 и 3.

Для чистоты эксперимента попробуйте сначала на локалхосте развернуть пустой сайт на Joomla 2.5 (заодно посмотрите, какие расширения у 2.5 есть в базовой комплектации) и мигрировать его на 3.0. Если все ОК, то переходим к нашему пероекту.

Поскольку база большая, вполне вероятно, пока она обновляется истекает максимальное время выполнения скрипта (в php.ini параметр max_execution_time — в секундах, по умолчанию 30). Если его поставить 0, то время будет неограниченным, но есть вероятность при этом завесить сервак всерьез и надолго, использовать только на локалхосте. Я помню у меня один сайт мигрировал в течение 6!!! часов — там база данных была тоже в несколько ГБ.

Обновлять файлы вручную через консоль — так себе идея, поскольку обновляются не только файлы, но и структура БД. Вероятность, что новый движок заведется со старой БД стремится к нулю. Можно еще таким же образом (вручную) обновить и БД, но этот процесс может ОЧЕНЬ сильно затянуться. И результат не гарантирован, опять таки. То есть единственно правильным решением будет заставить обновиться Joomla ее штатными средствами.

99% причин ошибок при обновлении — несовместимость старых расширений и шаблонов с новым движком. То есть, нужно по максимуму избавиться от всего лишнего и установить стандартный джумловский шаблон. Вполне возможно и пустую страницу он выводит оттого, что старый шаблон не в силах срендерить страницу, а у него внутри отключено отображение ошибок (оно перекрывает настройки php.ini).

Письмо 2

Артём, спасибо вам большое за консультацию.

Сделал так, как вы сказали: перенёс сайт на локальный сервер к себе, но обновления до Joomla 3.x всё равно никак не удавались пока не сделал следующее:

  1. удалил вообще все «неродные» модули и дополнения из Joomla 2.5.28 (их нумерация id в базе, кажется, с 10000 начинается (пришлось пожертвовать многолетним контентом фотогалереи, голосований и т.п.)
  2. распаковал файлы из архива Joomla! 2.5.28 Full Package поверх файлов сайта (кроме папки installation, естественно) — с 2009 года над сайтом поработали десятки людей и даже через diff очень сложно было найти где и какие они изменения вносили в код сайта вручную, которые теперь препятствуют обновлению (а ведь я поначалу приводил файлы в соответствие с оригиналом и пытался понять, что и где делает каждая внесённая правка и как её вернуть при случае)

    И вот после этого Joomla 2.5.28 вообще без проблем обновилась до 3.0 через панель управления (допускаю, что можно было сразу 3.5.1 попробовать, как пишут в документации). Несмотря на большой размер базы данных, миграция происходила относительно недолго (5-10 минут быть может). Я даже поначалу не понял, что всё уже обновилось, так как ожидал многочасового процесса. Скорее всего, это заслуга моего 10-ядерного Xeon E5-2640L v2 с 8 Гб RAM + я конфиг mariadb отредактировал на максимальную производительность
  3. Следующим шагом должно было стать обновление до 3.5.1(с этой версии, как я прочитал, была изменена система обновлений ядра Joomla) и тут тоже некоторый затык произошёл: через панель управления сайтом обновление никак не удавалось. Каждый раз в процессе обновления выбрасывало из панели и просило ввести пароль, а при последующем вводе пароля администратора и входе в админку обратно было видно, что хоть обновление вроде как и прошло, но база закосячилась: вместо сообщения database structure is up to date при проверке структуры писало, что отсутствуют какие-то таблицы и при каждой попытке обновления разные, а возможности исправить это соответстующей кнопкой не было (скрипт при обновлении не прекращал работу по таймауту или иным причинам: в логах apache, mariadb и php вообще никаких ошибок не было)

На сайте https://docs.joomla.org/J3.x:Upgrading_from_Joomla_3.4.x_to_3.5 было указано три способа обновления до joomla 3.5.1: A, B и C. Вариант «C» предлагалось использовать, если A и B не сработали. Он заключался в том, чтоб распаковать файлы из Joomla_3.5.1-Stable-Update_Package в папку сайта вручную с перезаписью существующих, а после этого закачать файл postupdate.php (с https://gist.github.com/mbabker/d7bfb4e1e2fbc6b7815a733607f89281#file-readme-md ) в /administrator и запустить его на исполнение. Так и сделал: перезаписал файлы и выполнение скрипта запустил консольно («php \путь до joomla\administrator\postupdate.php») — вот тут сервер надолго подвис (в процессах gzip и mariadb долбились в 100% нагрузку CPU) и в итоге обновление до 3.5.1 удалось.
Теперь дальше буду пытаться прыгать через версии вплоть до 5.0

 

p.s. Выводы

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

1. Компонент старой версии не поддерживается новой версией CMS, а новой версии нет - производитель перестал этот продукт поддерживать. Здесь без вариантов - отказ от данного компонента и поиск адекватной замены, а потом, соответственно, перенос контента (чаще всего вручную).

2. Есть новая версия компонента, но в J3, 4, 5 она стала платной - этот вопрос можно решить покупкой, весь вопрос в цене.

3. Самый неприятный случай - это расширение вроде есть, но старая версия была "допилена" вручную под нужды конкретного проекта. Она вообще могут не иметь аналогов, совместимых с новой версией. Брать что-то из того что есть и модифицировать код - по сути дела костыль, который вылезет при очередном глобальном обновлении CMS.

Еще, как бы это не цинично звучало, есть сайты, которые проще пристрелить, чем обновлять. К примеру, если >90% информации на сайте устарело и закопано настолько глубоко, кто ни один посетитель дотуда не дойдет. Видел подобные сайты у муниципальных организаций, которые когда-то были сделаны "для галочки". Логично сначала выполнить ревизию материалов на сайте, а уж потом думать - обновлять версию CMS или создать "чистый" сайт на актуальной версии и перенести туда материалы вручную. По трудозатратам второй вариант может оказаться рациональнее.

Ну и главное. Уважаемые заказчики! Если вы считаете, что обновить Joomla так же легко, как обновить Microsoft Office на компьютере - знайте, это не так! Это долгая и трудоемкая процедура, причем, каждый конкретный случай уникален. Решить такую задачу качественно может только грамотный специалист, знакомый с программированием, базами данных и пониманием основ работы Joomla. Такая работа по определению не может стоить дешево. Хотите сослаться на объявления, где заявленная стоимость процедуры 3-5 тысяч рублей? Это цена миграции "пустого" сайта с голой CMS. Это как автомобиль в базовой комплектации. В прайс-листе есть, в продаже нет и не будет даже под заказ :) Для реальных продуктов ценник в несколько раз выше.

p.p.s. Я с Joomla уже давно не работаю. Информация на сайте предоставляется как есть, используйте на свой страх и риск. Если она окажется вам полезной - поделитесь ссылкой на статью любым удобным способом.