2012-07-04 5 views
1

Вот проблемаКак лечить Database_Exception с Kohana 3 ORM

Существует скрипт, который после X количества времени (неизвестное количество от 5 до 40 минут) выдает следующее сообщение об ошибке: сервера MySQL уже ушел, который Кохана превращается в Database_Exception 2006 В результате некоторая информация не сохраняется в БД.

Вот что я думаю, что мог бы работать

class Model_Bar extends ORM { 

protected $_belongs_to = array(
    'foo' => array() 
); 

public function save(){ //Extends the save method 
    try { 
     $result = parent::save(); //Try parent save 
    } catch (Database_Exception $e) { //Catch exception 
     if ($e->getCode() == 2006) { //If exception code == 2006 then DB has gone away 
      mysqli_ping(); //Try to refresh DB link 
      $result = parent::save(); //Try parent save again 
     } else { //Exception code != 2006 
      throw new Exception($e); //Throw new DB exception 
     } 
    } 
    return $result; // Return the result from parent::save() 
    } 
} 

Вопрос: Как я могу обновить ссылку на БД в ORM Kohana в?

Дополнительная информация:

  • Использование Kohana 3.0.8
  • Possible solution (я не знаю, как попробовать его в Kohana)

Спасибо!

+1

Можете ли вы не просто повторно подключиться после долгого процесса, а до вашего сохранения? – Petah

+0

Не проблема ORM - это вопрос, касающийся аппликации. ORM не имеет особого значения. – TomTom

+0

@Petah, Это именно то, что я хочу сделать. Вот почему я расширил метод сохранения. Дело в том, что я не могу найти способ сделать это. –

ответ

0

Это проблема либо

  • Достигнуто в MYSQL настроен тайм-аут
  • Превышен размер пакета
  • потери пакетов

Если вы выполняете длинную вставку, как массовой вставки , если ваша БД не настроена для этого, никакие изменения в вашем коде не окажут никакого эффекта. Вы можете попытаться перенастроить свой экземпляр MYSQL, а затем исключить вину MYSQL, а затем после того, как вы попытаетесь внести изменения в свой код (что, я сомневаюсь, является источником проблемы). Повторная попытка сохранения не поможет, но сделать DB еще более занятой.

Другое дело, если вы используете прокси-сервер (например, HAProxy), проверьте таймауты на этом.