Внутренняя ошибка сервера при просмотре отключенного продукта (предприятия)


Я запускаю Enterprise 1.14.1, и у меня проблема с "белым экраном", Внутренняя ошибка сервера всякий раз, когда просматриваю отключенный продукт с включенной компиляцией.

Если я отключу компиляцию и просмотрю продукт, я увижу страницу 404, как и ожидалось.

К сожалению, я также не вижу никаких ошибок в файлах журнала моего сервера, которые позволили бы мне отследить, что происходит. Я могу воспроизвести это как в производственной среде, так и локально. Режим разработчика "Включен". Кэширование отключено. Система и ведение журнала исключений включены.

Для репликации

  1. Включить компиляцию
  2. Отключить продукт.
  3. Очистить кэш (если включено)
  4. Просмотр продукта.

Что я пробовал

Я пробовал раскомментировать #ini_set('display_errors', 1); в index.php файл. Если я это сделаю, я получу ответ 200, но ошибка не отображается ни на экране, ни в журналах ошибок.

Я, очевидно, пробовал перекомпилировать.

Я собираюсь начать отключать расширения одно за другим, чтобы посмотреть, нет ли какого-то конфликта.

Обновление

Я смог воспроизвести это на чистой установке Enterprise с помощью одного настраиваемого продукта.

Author: brentwpeterson, 2014-12-30

2 answers

Существует три возможных решения:

  1. Отключить компиляцию:)
  2. Переписать Mage_Catalog_ProductController класс и изменить viewAction()
  3. Изменить 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';
    }
}
 3
Author: Lord Skeletor, 2015-01-03 13:23:31

В качестве альтернативного решения команда разработчиков 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';

 0
Author: Phil Birnie, 2015-01-05 17:55:17