E ОШИБКА КОМПИЛЯЦИИ при включении компиляции Magento


Я пытаюсь включить компиляцию в Magento через панель управления, и пока включена компиляция, главная страница не отображается должным образом, и я нахожу, что index.php неоднократно вызывал следующую ошибку в журналах:

E_­COMPILE_­ERROR: require_­once­(­)­: Failed opening required '­Config­File­Manager­Model.­php' ­(include_­path='/­var/­www/­vhosts/­<domain_name_redacted>/­httpdocs/­includes/­src­:.­:'­)­

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

 1
Author: benmarks, 2013-05-06

1 answers

Похоже, что одно из ваших расширений или какой-то пользовательский код в вашей системе несовместим с режимом компиляции Magento. Точное решение будет варьироваться в зависимости от вашей системы PHP. Вот объяснение проблемы и несколько советов по устранению неполадок, которые должны вам помочь.

Файл в вашей системе содержит строку, которая выглядит примерно так

//the string 'ConfigFileManager-Model.php' may be 
//a constant or variable as well

require_once 'ConfigFileManager-Model.php';

Файл ConfigFileManager-Model.php не является частью Magento или какого-либо общедоступного пакета, насколько я могу судить.

Похоже, что когда вы работаете в "некомпилированном режиме", Magento может найти этот файл без проблем. Это означает, что он находится где-то в обычных путях включения Magento

/path/to/magento/app/code/core/ConfigFileManager-Model.php    
/path/to/magento/app/code/community/ConfigFileManager-Model.php
/path/to/magento/app/code/local/ConfigFileManager-Model.php
/path/to/magento/path/to/calling/files/own/folder/ConfigFileManager-Model.php

#possibly more, depending on your system's default include path

Однако, когда Magento запускается в скомпилированном режиме, core, local, и community пути пула кода не добавляются как включающие пути. Только папка

/path/to/magento/includes/src

Добавляется в качестве пути включения. Кроме того, режим компиляции делает копии всех файлов классов и помещает их в includes/src папка. Это означает, что собственная исходная папка файла больше не находится в пути включения. Из-за этого, когда Magento запускает код require в режиме компиляции, он не может найти файл ConfigFileManager-Model.php и терпит неудачу.

Лучше всего было бы перекодировать модуль и/или пользовательский код таким образом, чтобы функциональность ConfigFileManager-Model.php была включена в стандартный помощник Magento класса model.

Менее хорошей, но более быстрой вещью было бы идентифицировать все места ConfigFileManager-Model.php required и изменить путь так, чтобы это абсолютное, а не относительное.

 3
Author: Alan Storm, 2013-05-06 05:59:17