На одном из сайтов моего коллеги (после его переноса на новый сервер) никак не хотел устанавливаться мой компонент для музыкальных сайтов на Joomla, под названием Commedia.

В процессе установки сайт долго-долго думал и в конце концов выдавал ошибку:

Allowed memory size of 1073741824 bytes exhausted (tried to allocate 92031 bytes) in /home/candil/web/candilradio.com/public_html/libraries/joomla/database/tablenested.php on line 1354

Представляете, 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

Где нужно # заменить своим префиксом таблицы.
Теперь следовало дождаться, когда коллега даст доступ в его базу данных и посмотреть, в чем там дело.

Add comment


Security code
Refresh