viernes, 27 de marzo de 2009

Autoajuste desarrollo-producción

Si haces clic en el título de la entrada podrás visitar el artículo de Joel Moss sobre cómo seleccionar automáticamente la conexión de base de datos según estés en el servidor de producción o en el de desarrollo.

En mi caso he realizado una pequeña modificación respecto al original, como se puede apreciar en mi database.php. En principio, usar env() es más seguro porque CakePHP utiliza varios recursos si no puede obtener directamente la variable HTTP_HOST.


class DATABASE_CONFIG {

var $default = array(
'driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'port' => '8889',
'login' => 'xxxxxxxx',
'password' => 'xxxxxxxx',
'database' => 'intranet',
'encoding' => 'utf8',
'prefix' => ''
);

var $production = array(
'driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => '172.16.0.150',
'login' => 'xxxxxxxx',
'password' => 'xxxxxxxx',
'database' => 'intranet',
'encoding' => 'utf8',
'prefix' => ''
);

var $test = array(
'driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'port' => '8889',
'login' => 'xxxxxxxx',
'password' => 'xxxxxxxx',
'database' => 'intranet_test',
'encoding' => 'utf8',
'prefix' => ''
);

/**
* http://bakery.cakephp.org/articles/view/easy-peasy-database-config
*
* Joel Moss' technique to auto-config app to work under production and development
* a bit modified by myself
*
*/

function __construct() {
$server = env('HTTP_HOST');
if($server != 'localhost:8888') {
$this->default = $this->production;
}
}

function DATABASE_CONFIG() {
$this->__construct();
}

}
?>

Por otra parte, mis dos máquinas de desarrollo (la del trabajo y la de casa) están configuradas con MAMP y con los mismos parámetros, por lo que me resulta más fácil controlar si estoy o no en local. De todos modos, el sistema es fácilmente generalizable a cualquier planteamiento. Sólo necesitas definir las distintas configuraciones de base de datos y establecer el criterio que escoja una u otra según el servidor.

El otro punto a controlar es el nivel de Debug, que también he automatizado mediante la misma técnica. He añadido esto en el core.php.


$server = env('HTTP_HOST');
$debug = ife($server != 'localhost:8888', 0, 2);
Configure::write('debug', $debug);