На одном из сайтов моего коллеги (после его переноса на новый сервер) никак не хотел устанавливаться мой компонент для музыкальных сайтов на Joomla, под названием Commedia.
В процессе установки сайт долго-долго думал и в конце концов выдавал ошибку:
Allowed memory size of 1073741824 bytes exhausted (tried to allocate 92031 bytes) in /home/candil/web/candilradio.
Представляете, 1 Гб оперативной памяти, выделенного на сервере для выполнения скриптов, серверу оказалось недостаточно... Разумеется мой коллега "грешил" на мой компонент, однако мне что-то подсказывало, что дело тут не в компоненте Commedia, а в настройках сервера или в самой базе данных.
Разумеется, самы простой способ решения проблемы - это увеличить допустимую память еще немного (тем более не хватало каких-то сотни килобайт), но это неправильное решение. Нужно было откопать корень проблемы.
Итак, я начал искать.
Почему-то первым делом, я решил убедиться, что проблема все-таки не в моем расширении (а следовало бы сразу открыть файл, бьющий ошибку) и первое, что сделал: убрал (закомментировал) все SQL-скрипты, выполняющиеся в моем файле install.php. Однако это не помогло...
Тогда решено было посмотреть код, который выдавал ошибку:
Строка 1354 в файле tablenested.php содержала следующий код:
$rightId = $this->rebuild($node->{$this->_tbl_key}, $rightId, $level + 1, $path . (empty($path) ? '' : '/') . $node->alias);
Он являлся частью функции, которая рекурсивно перестраивала меню. То есть проблема была как раз в том, что Joomla не могла добавить в административное меню пункты моего компонента Commedia (к слову, он тоже мне сообщил об этом, что пунктов меню нет, а раньше были).
Значит надо было разбираться с таблицей _menu в базе данных сайта. Похоже, что не все прошло гладко при переносе сайта с одного сервера на другой.
Поиск в интернете выдал варианты решений:
В одном случае у таблицы __menu исчез первичный уникальный ключ PRIMARY.
Это иногда случается, когда для миграции сайта используются SP Upgrade или JUpgrade инструменты для миграции.
В другом коллега обнаружил, что все значения ячеек в столбце Level увеличились на 2, то есть у всех пунктов Главного меню, которые имели раньше в TOP LEVEL значение 1, теперь стало значение 3.
Ему помог SQL-запрос к базе:
Код:
UPDATE #_menu
SET level = level - 2
Теперь следовало дождаться, когда коллега даст доступ в его базу данных и посмотреть, в чем там дело.