Внутренняя ошибка сервера при просмотре отключенного продукта (предприятия)
Я запускаю Enterprise 1.14.1, и у меня проблема с "белым экраном", Внутренняя ошибка сервера всякий раз, когда просматриваю отключенный продукт с включенной компиляцией.
Если я отключу компиляцию и просмотрю продукт, я увижу страницу 404, как и ожидалось.
К сожалению, я также не вижу никаких ошибок в файлах журнала моего сервера, которые позволили бы мне отследить, что происходит. Я могу воспроизвести это как в производственной среде, так и локально. Режим разработчика "Включен". Кэширование отключено. Система и ведение журнала исключений включены.
Для репликации
- Включить компиляцию
- Отключить продукт.
- Очистить кэш (если включено)
- Просмотр продукта.
Что я пробовал
Я пробовал раскомментировать #ini_set('display_errors', 1);
в index.php файл. Если я это сделаю, я получу ответ 200, но ошибка не отображается ни на экране, ни в журналах ошибок.
Я, очевидно, пробовал перекомпилировать.
Я собираюсь начать отключать расширения одно за другим, чтобы посмотреть, нет ли какого-то конфликта.
Обновление
Я смог воспроизвести это на чистой установке Enterprise с помощью одного настраиваемого продукта.
2 answers
Существует три возможных решения:
- Отключить компиляцию:)
- Переписать
Mage_Catalog_ProductController
класс и изменитьviewAction()
- Изменить
registerScope
метод внутриVarien_Autoload
класса
Пример кода для метода 2.
....
// Render page
try {
$viewHelper->prepareAndRender($productId, $this, $params);
} catch (Exception $e) {
if ($e->getCode() == $viewHelper->ERR_NO_PRODUCT_LOADED) {
if (isset($_GET['store']) && !$this->getResponse()->isRedirect()) {
$this->_redirect('');
} elseif (!$this->getResponse()->isRedirect()) {
$this->_forward('noRoute', 'index', 'cms');
}
} else {
Mage::logException($e);
$this->_forward('noRoute', 'index', 'cms');
}
}
....
Пример кода для метода 3.
static public function registerScope($code)
{
self::$_scope = $code;
if (defined('COMPILER_INCLUDE_PATH')) {
@include_once COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . self::SCOPE_FILE_PREFIX.$code.'.php';
}
}
В качестве альтернативного решения команда разработчиков Magento Enterprise создала исправление PATCH_SUPEE-5095_EE_1.14.1.0_v1.sh
. Для этого используется решение № 3 "Переиндексировать их всех" в форме исправления.
Исправление представляет собой изменение в одну строку, которое изменяет следующее в lib/Varien/Autoload.php
в строке 105.
@include COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . self::SCOPE_FILE_PREFIX.$code.'.php';
До
@include_once COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . self::SCOPE_FILE_PREFIX.$code.'.php';