Другая возможность состоит в том, что ваш каталог magento / lib не обновляется. Если вы выполняли ручной процесс, как я, вы, возможно, пропустили обновление этого каталога. Я обнаружил, что существует несколько причин, по которым объект подключения может быть пустым:
- Неправильная конфигурация (может отсутствовать материал, необходимый для 1.6+, может иметь неверную информацию, может быть кэширован со старыми данными) - кажется, что
var/cache
файлы также могут быть ответственны, в зависимости от того, как настроено ваше кэширование.
- Что-то действительно запутано в конфигурации модуля. В нашем случае это не было проблемой: core_setup был обновляемым модулем.
- Старые версии файлов классов (кажется, применимы для обновления с версии ниже 1.6 до 1.6+), в частности, при создании или получении объектов подключения он смотрит, расширяет ли он новый интерфейс,
Varien_Db_Adapter_Interface
.
- Как всегда, существует возможность испортить права доступа к файлам.
В третьем случае быстрая проверка app/code/core/Mage/Core/Model/Resource.php
показывает причины, по которым члены данных _connection могут быть недействительными. Одна из основных проверок, которую он выполняет, состоит в том, чтобы увидеть, является ли созданный объект соединения экземпляром (включает в себя подкласс) Varien_Db_Adapter_Interface
. Из библиотек для 1.4.1.1 (в нашем случае)
class Varien_Db_Adapter_Pdo_Mysql extends Zend_Db_Adapter_Pdo_Mysql
но в 1.6 +
class Varien_Db_Adapter_Pdo_Mysql extends Zend_Db_Adapter_Pdo_Mysql implements Varien_Db_Adapter_Interface
ergo, проверка не пройдена, и даже при правильной конфигурации вы не получите объекты подключения. Это плохое программирование с их стороны, что оно не REPORT этой проблемы ОЧЕНЬ СПЕЦИАЛЬНО , поскольку оно создает поведение состояния ошибки , идентичное, но никак не связанное с , еще одна распространенная ошибка: неправильная настройка соединения с базой данных. Это не похоже на пассивную проверку. Они явно проверяют наличие нового интерфейса, но затем не регистрируют и не генерируют какую-либо потенциальную отладочную информацию, касающуюся этого.
В качестве заключительного замечания, во время обновления, если у вас много вещей, вы можете явно записать этот сбой в случае, если что-то в вашем коде каким-то образом использует старый адаптер БД. (в нашем случае некоторый код, написанный другим подрядчиком, переопределил адаптер в пространстве имен local
, что снова вызвало эту ошибку.)