Как предотвратить проблемы с установкой расширения при включении режима компиляции

magento.stackexchange https://magento.stackexchange.com/questions/5118

Вопрос

У меня есть расширение, которое прослушивает событие core_layout_block_create_after.Это может быть любое событие, которое срабатывает в администраторе Magento.Также у меня есть экземпляр magento с включенным режимом компилятора.Я установил расширение через magentoconnect.Установка прошла успешно, кэш очищен.Теперь, вернувшись обратно к администратору, я получу ошибку:

Mage registry key "_singleton/extension/observer" already exists
 /var/www/magento/trunk/app/Mage.php(222): Mage::throwException('Mage registry k...')
 /var/www/magento/trunk/app/Mage.php(476): Mage::register('_singleton/exte...', false)
 /var/www/magento/trunk/includes/src/__default.php(21023): Mage::getSingleton('extension...')
 /var/www/magento/trunk/app/Mage.php(447): Mage_Core_Model_App->dispatchEvent('core_layout_blo...', Ar
ray)
 /var/www/magento/trunk/includes/src/__default.php(27297): Mage::dispatchEvent('core_layout_blo...', A
rray)
 /var/www/magento/trunk/includes/src/__default.php(27310): Mage_Core_Model_Layout->createBlock('adminh
tml/page', 'root')
 /var/www/magento/trunk/includes/src/__default.php(27077): Mage_Core_Model_Layout->addBlock('adminhtml
/page', 'root')
 /var/www/magento/trunk/includes/src/__default.php(27043): Mage_Core_Model_Layout->_generateBlock(Obje
ct(Mage_Core_Model_Layout_Element), Object(Mage_Core_Model_Layout_Element))
 /var/www/magento-demo/trunk/includes/src/__default.php(13507): Mage_Core_Model_Layout->generateBlocks()
 /var/www/magento/trunk/includes/src/__default.php(13432): Mage_Core_Controller_Varien_Action->generat
eLayoutBlocks()
 /var/www/magento/trunk/includes/src/Mage_Adminhtml_Controller_Action.php(275): Mage_Core_Controller_Varien_Action->loadLayout(NULL, true, true)
 /var/www/magento/trunk/app/code/core/Mage/Compiler/controllers/Adminhtml/Compiler/ProcessController.
php(59): Mage_Adminhtml_Controller_Action->loadLayout()
 /var/www/magento/trunk/includes/src/__default.php(13582): Mage_Compiler_Adminhtml_Compiler_ProcessController->indexAction()
 /var/www/magento/trunk/includes/src/__default.php(17927): Mage_Core_Controller_Varien_Action->dispatch('index')
 /var/www/magento/trunk/includes/src/__default.php(17484): Mage_Core_Controller_Varien_Router_Standar
d->match(Object(Mage_Core_Controller_Request_Http))
 /var/www/magento/trunk/includes/src/__default.php(20061): Mage_Core_Controller_Varien_Front->dispatch()
 /var/www/magento/trunk/app/Mage.php(683): Mage_Core_Model_App->run(Array)
 /var/www/magento/trunk/index.php(87): Mage::run('', 'store')
Это было полезно?

Решение 3

Мне жаль ответить так поздно, но я хочу описать, как я исправил эту ошибку. Проблема заключалась в том, что мой наблюдатель был прикреплен в глобальной области, чтобы core_layout_block_create_after событие, которое стреляет в обеих областях (Frontend, Admin).

После установки во время компиляции режим включения кэш был очищен. Но код не перекомпилировался во время установки. Это означает, что после возвращения обратно я не смог получить доступ к администратору и повторно заново. Я мог бы сделать это только из консоли.

Поскольку мне нужно было наблюдать за этим событием только для области фронта, я только что переместил инициализацию наблюдателя. И проблема была исправлена.

Мои советы не инициализируют наблюдателей в глобальном объеме для событий, которые работают на каждой странице администратора.

Другие советы

Единственный способ, которым я считаю возможным постоянно избегать этого, - это отключить режим компиляции. до установка/внесение любых изменений кода.Вам также потребуется повторно запустить процесс компиляции после установки.Простое повторное включение приведет к той же проблеме.

Основная проблема заключается в том, что при включенном режиме компиляции Magento анализирует новые файлы config.xml, но будет искать классы только по пути include/.Когда вы устанавливаете новое расширение, новые файлы помещаются в стандартные пути Magento и не обнаруживаются Magento.

Если бы расширение включало файлы как в скомпилированном, так и в нескомпилированном состоянии, это можно было бы предотвратить.Процедуры установки sql также не являются частью скомпилированного состояния и могут использоваться для изменения путей включения PHP (это кажется довольно хакерским).

Я считаю такое поведение недосмотром в реализации режима компиляции Magento - варианты, которые имели бы смысл: 1.) изменение конфигурации делает режим компиляции недействительным 2.) конфигурация также компилируется для обеспечения согласованного сайта

Вам нужно будет повторно запустить компилятор через систему> «Инструменты»> «Компиляция».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top