После переноса на страницах нет контента

Фруктенштейн

Осваивается
Регистрация
05.12.2016
Сообщения
15
Реакции
2
Добрый день. Прошу прощения за создание новой темы, но пока не нашел советов по моей проблеме.
Переношу MediaWiki 1.19.15 на новый сервер. На старом виртуальном хостинге стоят Apache, PHP 5.3.28 (cgi-fcgi) и MySQL5.6.32-78.0. На новом VPS — Nginx 1.6.2, php-fpm 5.6.27, MariaDB 10.0.28 (это все на Debian Jessie). MediaWiki лежит в корне. В LocalSettings включены расширения ConfirmEdit, Nuke, AntiBot, Widgets.

Во время переноса меняю имя БД и имя пользователя БД. В LocalSettings.php заменяю эти две переменные и еще wgServer.

После переноса получаю страницы, на которых нет контента. Оформление есть, меню есть, есть список страниц со списком версий, а собственно содержимого wiki нет. Включаю display_errors, получаю ошибку:

preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/mediawiki/extensions/Widgets/WidgetRenderer.php on line 144

Правлю WidgetRenderer.php, ошибка исчезает, но содержимого как не было, так и нет. Других ошибок в логах не замечено. Что мне еще стоит попробовать, чтобы найти проблему?

Я мог бы еще погрешить на настройки MySQL. В дампе для большинства таблиц стоит DEFAULT CHARSET=binary, а на новом сервере все настроено под utf8. Но БД mediawiki я пробовал создавать в том числе с DEFAULT CHARSET binary, не помогает.

Пробовал еще обновить MediaWiki до 1.28, но это отдельная история, ничуть не более успешная.
 
Базы обновил? Я их обновляю через установщик, дописав к домену mw-config/
 
Базу я не обновлял. Я же MediaWiki не обновляю, на новом сервере та же версия.

FAQ читал. Нашел там ту же мысль, которая мне уже приходила в голову — что все дело в кодировке MySQL. Перенастроил БД так, чтобы переменные, определяющие чарсет, были такими же, как на старом хостинге:
На старом:
character_set_client
latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/percona-server/charsets/
collation_connection latin1_swedish_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci

На новом:
character_set_client
latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
collation_connection latin1_swedish_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci

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

Для решения этой проблемы необходимо изменить кодировку таблиц на нужную, как это сделать описано тут, тут, тут и вот тут тут.
 
Спасибо, почитал внимательнее. Попробовал более-менее наугад несколько способов, включая update.php, обновление через mw-config и ALTER TABLE page CONVERT TO CHARACTER SET latin1 COLLATE latin1_bin. Попробовал и еще один способ, который, как мне казалось, должен был бы сработать безошибочно: удалил БД, запустил установку MW, дал ей создать новую БД, потом, не удаляя таблицы, обнулил их (TRUNCATE) и заново залил дамп. Ни один способ не только не сработал, но и вообще не дал видимых изменений.

Это наводит меня на мысль, что дело, возможно, не в кодировке, тем более, что в списке страниц их названия я вижу, и никаких проблем с кодировкой нет. Кроме того, обнаружилось, что есть несколько страниц, в которых содержимое на месте. Закономерностей, позволяющих понять, почему именно эти страницы в порядке, я пока не увидел.

Зато обнаружил вот что. Попробовал я поработать за Wiki — руками поселектить из базы содержимое страниц. И действительно, обнаружил, что текста просто нет:

select old_text from text where old_id in (select rev_text_id from revision where rev_id in (select page_latest from page where page_title='Баян'));
Empty set (0.01 sec)

Если же текст находится в базе, то он нормально отображается.
 
Там мало страниц с английским названием, но вот, например:
Код:
MariaDB [mediawiki]> select page_latest from page where page_title='2';
+-------------+
| page_latest |
+-------------+
|      23148 |
+-------------+
1 row in set (0.00 sec)

MariaDB [mediawiki]> select * from text where old_id in (select rev_text_id from revision where rev_id in (select page_latest from page where page_title='2'));
Empty set (0.01 sec)

Я проверил, в исходной вики текст этой статьи есть.

Еще я не очень хорошо понимаю, как это все работает. Там в page лежат две записи с page_title='Заглавная_страница'. Текст существует только для одной из них:

Код:
select page_latest from page where page_title='Заглавная_страница';
+-------------+
| page_latest |
+-------------+
|  24114 |
|  54 |
+-------------+
2 rows in set (0.00 sec)

select * from text where old_id in (select rev_text_id from revision where rev_id in (select page_latest from page where page_title='Заглавная_страница'));
+--------+-----------------------+-----------+
| old_id | old_text  | old_flags |
+--------+-----------------------+-----------+
|  54 | Обсуждаем... | utf-8  |
+--------+-----------------------+-----------+
1 row in set (0.00 sec)

Интересно, как вики определяет, какую из них показывать? Первую по порядку?
 
Вообще-то есть чувство, что у меня дамп не полный :( Пойду еще поработаю sql-ем.
 
Действительно, хостерский PHPMyAdmin отдавал не весь дамп базы данных. Не зря я не люблю виртуальный хостинг.
Поставил MySQLDumper, получил полный дамп в два с лишним раза больше предыдущего, сразу появились все страницы. Прошу прощения за беспокойство, спасибо всем за помощь!
 
Назад
Верх