2013-08-22 2 views
4

Я переместил установку на другой сервер. Я обновил конфигурационный файл в каталоге var /, и баннеры будут обслуживаться, но интерфейс администратора не работает.OpenX: Перемещено на другой сервер

я получаю сообщение об ошибке:

A fatal error occurred OpenX can't connect to the database. Because of this it isn't possible to use the administrator interface

я очистил каталог кэша в вар, но затем я получаю PHP Fatal error: Call to undefined method MDB2_Error::quoteIdentifier() in /[path]/opx/lib/OA/Upgrade/VersionController.php on line 50

Я не знаю, какая версия это, но, похоже, его не менее 2 лет старый.

Есть ли какой-либо специальный кэш на месте, о котором я не знаю?

Любая помощь по этому вопросу была бы высоко оценена.

+0

Вы тоже переместили базу данных? – alex

+0

конечно: D какой вопрос .... баннеры подаются тоже так все правильно. пользователь может подключиться к db тоже. – Rufinus

+1

Нет ничего плохого в вопросе @ alex. Нет ничего необычного в том, что веб-серверы и базы данных работают в отдельных блоках. – Shoan

ответ

2

Умственное примечание. Если у вас есть бит на другом сервере, то openx не имеет значения, если вы установите хост на ip сервера db и порт .. если вы не установили protocol=protocol !! !

Это самая глупая вещь, которую я когда-либо видел, нет необходимости в конфигурации протокола, поскольку php всегда использует сокет, если вы устанавливаете «localhost».

+2

Говоря о глупостях ... Я просто убил 2 часа, изучая это, только чтобы узнать, что мой (случайно сгенерированный) пароль БД содержит «%», а MDB2, похоже, не нравится. После перехода на другой пароль все сработало. – Pascal

1

Это не легко сказать точно, что здесь не так, но можно сделать хорошую догадку:

Как видно из сообщения об ошибке, есть объект в вашем коде, который не реализует метод quoteIdentifier() ,

Для этого существуют две основные причины: либо мы называем более старую или новую версию того же экземпляра класса, который не реализует этот метод. Может быть, потому, что он устарел или кто знает. Или объект просто не относится к ожидаемому типу.

Lo и вот, если мы ищем MDB2 родственный класс, который реализует этот метод, это класс MDB2. Не MDB2_Error! Итак, теперь мы знаем причину ошибки, пришло время рассуждать о первопричине.

Connecting to a database с MDB2 работает примерно так:

$mdb2 =& MDB2::connect('pgsql://usr:[email protected]/dbnam'); 
if (PEAR::isError($mdb2)) { 
    die($mdb2->getMessage()); 
} 

Там она есть. Мы можем видеть, что $ mdb2 действительно может быть типа MDB2_Error, в случае, если соединение по какой-то причине идет не так. Вот почему: ваш код не может подключиться к базе данных по какой-либо причине. Итак, следующий очевидный шаг должен быть проверен, имеет ли ваш пользователь db правильные права и использует правильный пароль. Я на 100% уверен, что ваш бэкэнд администратора не использует правильные учетные данные.

+0

спасибо за помощь. – Rufinus