Пустая страница админки в ModX после переноса на хостинг
Сегодня речь пойдет об ошибке ModX Revolution, которая возникает при переносе сайта на некоторые хостинги. Она заключается в том, что на экран выводится только меню админки, а боковое меню и контентная часть страницы остаются пустыми. При возникновении данной проблемы в файл с логами path/to/webroot/core/cache/logs/error.log
ничего не попадает, но в консоле web разработчика в браузере можно обнаружить следующее:
Failed to load resource: the server responded with a status of 400 (Bad Request) http://example.com/manager/min/index.php?f=/manager/assets/modext/cor…idgets/core/modx.panel.js,/manager/assets/modext/widgets/core/modx.tabs.js Failed to load resource: the server responded with a status of 400 (Bad Request) http://example.com/manager/min/index.php?f=/manager/assets/modext/wid…/assets/modext/core/modx.layout.js,/manager/templates/default/js/layout.js Failed to load resource: the server responded with a status of 400 (Bad Request) http://example.com/manager/min/index.php?f=/manager/assets/components…anel.system.settings.js,/manager/assets/modext/sections/system/settings.js Failed to load resource: the server responded with a status of 400 (Bad Request) ext-all.js:21 Uncaught TypeError: b[(d.xtype || e)] is not a function example.com/:35 Uncaught TypeError: MODx.SearchBar is not a function
Ошибка возникает из-за невозможности осуществить минификацию js скриптов и css стилей.
system_settings
и установить значения compress_css
и compress_js
в "0
". Это можно проделать следующим запросом (только не забудьте дописать префикс к названию таблицы, если он у вас установлен):UPDATE `system_settings` SET `value` = '0' WHERE `key` IN ('compress_css', 'compress_js');
После этого очищаем папку с кэшем настроек path/to/webroot/core/cache/system_settings
. Обновляем страницу админки и радуемся, что все вернулось на место.
Второй путь решения - переустановить ModX поверх ваших данных. Этот способ очень популярен. Для этого необходимо скопировать папку setup из дистрибутива ModX вашей версии и произвести частичную установку. Этот метод я также не рекомендую, т.к. надо разобраться в причинах.
Третий вариант решения (если у вас установлен Suhosin
патч для PHP). В скрипте минификации уже устанавливается настройки suhosin.get.max_value_length
в значение 4096
, но если ваш php запрещает менять значение этой настройки из скрипта, то необходимо установить ее через .htaccess (если у вас Apache) или через файл конфигураций suhosin.ini
. При необходимости перезагружаем web сервер и проверяем админку. Если проблема не решилась, то читаем дальше.
Вариант №4 (если установлен eAccelerator
). Иногда минификация скриптов ModX работает не совсем корректно с данным акселератором. Можно попробовать отключить его для скрипта. Для этого необходимо установить значение eaccelerator.enable
в 0
через webroot/manager/min/.htaccess
или php_ini
в файле /path/to/webroot/manager/min/index.php
.
Пятый вариант решения. Иногда проблема кроется в неправильном DOCUMENT_ROOT
(например, некоторые хостинги возвращают некорректное значение для поддомена). В данном случае его необходимо заменить для скрипта минификации. Для этого открываем файл path/to/webroot/manager/min/index.php
и первой строкой указываем путь до корня сайта. Это можно сделать несколькими способами:
// Жестко задаем путь руками $_SERVER['DOCUMENT_ROOT'] = '/path/to/webroot'; // Отдаем всю работу php, который сам строит правильный путь (данный вариан работает только если вы используете стандартную вложеность для админки) $_SERVER['DOCUMENT_ROOT'] = realpath(dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..');
На этом все.