2010-06-08 8 views
8

tengo proyecto desarrollado utilizando CakePHP que está recibiendo datos de diferentes DBs, pero si una de las tesis de bases de datos que algunas páginas no abierto y me da el siguiente error: mesabase de datos de cakephp no se encuentra

base de datos tablenae para el modelo moedlname no fue encontrado.

..y tengo en esta página otros datos mostrados de la otra base de datos que funcionan probablemente.

cómo puedo determinar si la base de datos está fuera de línea usando cake y puedo hacer que este modelo se lea desde otro lugar como un archivo de caché hasta que se vuelva a iniciar la base de datos.

+0

Hmmm. ¿Tiene tales interrupciones masivas de la base de datos que esto es realmente necesario? ¿Por qué? –

+0

feed database (stocks prices DB) Pekka – SMSM

Respuesta

2

Tal vez un mejor enfoque consiste en los resultados de caché y se lee de la memoria caché, solamente golpear la base de datos cuando sea necesario ...

<?php 
$cacheKey = 'myCacheNumber1'; 
if (($data = Cache::read($cacheKey)) === false) { 
    $data = $this->Model->find('all'); 
    if ($data) { 
     Cache::write($cacheKey, $data); 
    } 
} 
?> 

El problema con esto es que asume la conexión de modelo y la base de datos están disponibles para el momento en que el caché no existe (o ha expirado), y si no fuera así, aún obtendría los mismos errores, pero la frecuencia ciertamente se reduciría.

Creo que para probar si la base de datos está disponible en absoluto requeriría algún truco de código personalizado, ya que el método básico de conexión de la torta asume el éxito y falla mucho cuando no está disponible. Probablemente haga un componente con métodos de conexión PHP estándar para controlar si debe intentar cargar un modelo.

<?php 
$cacheKey = 'myCacheNumber1'; 
if (($data = Cache::read($cacheKey)) === false) { 
    if ($this->DbTest->check('hostname','username','password')) { 
     $data = $this->Model->find('all'); 
     if ($data) { 
      Cache::write($cacheKey, $data); 
     } 
    } 
} 
?> 
<?php 
// app/controllers/components/db_test.php 
class DbTestComponent extends Object { 
    function check($hostname,$username,$password) { 
     $result = true; 
     $link = @mysql_connect($hostname,$username,$password); 
     if (!$link) { 
      $result = false; 
     } 
     @mysql_close($link); 
     return $result; 
    } 
} 
?> 
Cuestiones relacionadas