Хобрук: Ваш путь к мастерству в программировании

Периодические ошибки Magento

У нас проблемы с промежуточной машиной, на которой работает Magento EE 1.13.1.

Проблема началась во вторник днем.

В то время мы обновили установленное приложение php/mysql.

На основном сайте magento браузер перенаправляется на страницу установки magento.

Проблема возникает только внутри приложения Magento и связана с сессиями — при возникновении ошибки magento выдает фатальную ошибку, похожую на эту:

(Я создал небольшое тестовое приложение, чтобы попытаться изолировать проблему).

Неустранимая ошибка: вызов функции-члена getCode() для не-объекта в /var/www/html/app/code/core/Mage/Customer/Model/Session.php в строке 71.

Call Stack: 0.0002 653728 
1. {main}() /var/www/html/t.php:0 0.3013 8153600 
2. Mage::getSingleton() /var/www/html/t.php:20 0.3013 8153912 
3. Mage::getModel() /var/www/html/app/Mage.php:477 0.3013 8153912 
4. Mage_Core_Model_Config->getModelInstance() /var/www/html/app/Mage.php:463 0.3016 8302032 
5. Mage_Customer_Model_Session->__construct() /var/www/html/app/code/core/Mage/Core/Model/Config.php:1348

Проблема возникает периодически, и мы можем временно исправить ее, остановив и запустив службу httpd.

Мы используем magento ee 1.13.1, php 5.3.3 и httpd 2.2.15.

Это происходит на промежуточной машине. Наша производственная машина с такой же системой и кодом работает правильно.

Мы пытались включить/выключить компиляцию magento, кэширование, php apc, изменили сеансы php, чтобы использовать диск, а не /tmp/fs, и изменили magento, чтобы использовать БД для своих сеансов.

Сайт не работает через несколько минут.

В системных логах ошибок нет.

Может кто подскажет как это отлаживать?

11.09.2014

  • опубликуйте конфигурацию, связанную с сеансом, из файла local.xml. Есть ли какой-либо балансировщик нагрузки. 11.09.2014
  • Local.xml в основном одинаков для наших экземпляров разработки, подготовки и производства, за исключением ключа безопасности и учетных данных БД. Балансировщика нагрузки нет. 12.09.2014
  • установите сеанс для хранения в базе данных, а затем проверьте, происходит ли это. 12.09.2014
  • Я попробовал это, и это не имело никакого значения. Я создал очень простую тестовую веб-программу php, которая загружала файл ./app/etc/local.xml, и эта тестовая программа периодически терпела неудачу. Наш вывод - это какая-то аппаратная проблема. Спасибо за все предложения. 14.09.2014

Ответы:


1

Это оказалось проблемой, связанной с функцией libxml_disable_entity_loader().

Zend framework вызывает эту функцию libxml_disable_entity_loader(true), а затем снова вызывает ее с (false).

В нашем коде есть путь, который оставлял это значение равным true.

Область действия этого параметра не ограничивается текущим php-скриптом, а текущим процессом httpd. т.е. он липкий, и это предотвращает загрузку внешних файлов функцией simplexml_load_file php.

Я наткнулся на эту статью:

Прерывистый simplexml_load_file(): предупреждение о вводе-выводе на локальном Joomla сайт

Это привело меня к выводу, что libxml_disable_entity_loader не является потокобезопасным и действительно «липким» в процессах httpd.

15.09.2014

2

Отключить компиляцию Magento:

$ php -f shell/compiler.php -- disable
Compiler include path disabled

Есть три способа, которыми это можно сделать:

  • От администратора Magento
    Перейдите на страницу компиляции системных инструментов и нажмите кнопку «Отключить». Перейдите на экран «Управление системным кэшем» и нажмите кнопку «Очистить кэш».
  • Используя SFTP, отредактировав файл include/config.php
    Чтобы отключить компиляцию в Magento, отредактируйте include/config.php. Раскомментируйте первую строку и закомментируйте вторую:

    define('COMPILER_INCLUDE_PATH', dirname(FILE).DIRECTORY_SEPARATOR.'src');
    define('COMPILER_COLLECT_PATH', dirname(FILE).DIRECTORY_SEPARATOR.'stat');
    
  • Используя программу оболочки SSH:

    php -f shell/compiler.php -- disable
    
    php -f shell/compiler.php -- clear
    
05.06.2015
Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..