/
Variables de entorno

Variables de entorno

Variables de entorno en máquinas "Basecentral"

 

El archivo de configuración del entorno provee a las aplicaciones de basecentral la independencia del modelo basado en el subdominio para identificar el entorno de ejecución.

Esto significa una mayor libertad y restricción en las configuraciones necesarias en los ambientes de desarrollo, pruebas y producción.

 Archivo de configuración.

Las variables se han introducido al archivo de configuración utilizado para almacenar las configuraciones de acceso a base de datos.

Por ejemplo: mx_sinbdc_db.php

 

$AWS_REGION = "us-east-1";
$ENVIRONMENT = "dev";
$DB_HOST = "mysql-v55.dev.unoi-sc.sndinf.internal";
$DB_HOST_SLAVE = "mysql-v55.dev.unoi-sc.sndinf.internal";
$DB_PORT = "3306";
$DB_DRIVER = "pdo_mysql";
$DB_SCHEMA = "uno";
$DB_USER = "fidel_consucorp";
$DB_USER_SLAVE = "fidel_consucorp";
$DB_PASSWORD = "xxxxxxx";
$DB_PASSWORD_SLAVE = "xxxxxxx";
$AWS_ACCESS_KEY = "AKIAJSH7QNKJM2MWHEBQ";
$AWS_SECRET_KEY = "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";
$WS_URI = "http://desenv.sistemauno.com/ws/";
$AWS_BUCKET = 'prestatic-apps.uno-internacional.com';
$mySqlHost = "mysql-v55.dev.unoi-sc.sndinf.internal";
$mySqlDb = "uno";
$mySqlUser = "fidel_consucorp";
$mySqlPassword = "xxxxxxx";

 

La variable ENVIRONMENT puede contener los siguientes valores.

    • desenv -> dev
    • homol -> pre
    • www -> pro

El mejor punto para incluir estas variables dentro de la aplicación es declararlas como constantes en el archivo index.php

 

// index.php
// set error reporting
ini_set('display_errors', 1);
error_reporting(E_ALL);
 
// change the following paths if necessary
define('BASECENTRAL', '/basecentral/apache/web/');
define('COMPARTIDO', BASECENTRAL . 'aplicacion/compartido/');
 
$yii= COMPARTIDO . 'yii-1.1.10/framework/yii.php';
 
require_once '/basecentral/apache/conf/br_devmonitor_db.php';
 
defined('AWS_REGION') or define('AWS_REGION', $AWS_REGION);
defined('ENVIRONMENT') or define('ENVIRONMENT', $ENVIRONMENT);
defined('DB_HOST') or define('DB_HOST', $DB_HOST);
defined('DB_HOST_SLAVE') or define('DB_HOST_SLAVE', $DB_HOST_SLAVE);
defined('DB_PORT') or define('DB_PORT', $DB_PORT);
defined('DB_DRIVER') or define('DB_DRIVER', $DB_DRIVER);
defined('DB_SCHEMA') or define('DB_SCHEMA', $DB_SCHEMA);
defined('DB_USER') or define('DB_USER', $DB_USER);
defined('DB_USER_SLAVE') or define('DB_USER_SLAVE', $DB_USER_SLAVE);
defined('DB_PASSWORD') or define('DB_PASSWORD', $DB_PASSWORD);
defined('DB_PASSWORD_SLAVE') or define('DB_PASSWORD_SLAVE', $DB_PASSWORD_SLAVE);
defined('AWS_ACCESS_KEY') or define('AWS_ACCESS_KEY', $AWS_ACCESS_KEY);
defined('AWS_SECRET_KEY') or define('AWS_SECRET_KEY', $AWS_SECRET_KEY);
defined('WS_URI') or define('WS_URI', $WS_URI);
defined('AWS_BUCKET') or define('AWS_BUCKET', $AWS_BUCKET);
 
$config=dirname(__FILE__).'/protected/config/main.php';
 
if(ENVIRONMENT == 'dev' || ENVIRONMENT == 'pre'){
 // remove the following lines when in production mode
 defined('YII_DEBUG') or define('YII_DEBUG',true);
 // specify how many levels of call stack should be shown in each log message
 defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
}else{
 // No mostrar trace o detalle de errores en producción
 ini_set('display_errors', 0);
}
 
require_once($yii);
Yii::createWebApplication($config)->run();

 Acceso a base de datos.

La "nueva versión" del archivo de configuración incluye ahora información del ambiente de ejecución y los parámetros para acceder a la base de datos Master y Slave.

 

// protected/config/db.php
// Ejemplo de configuración de base de datos
if(ENVIRONMENT == 'dev'){
 // para realizar el trace en debug_toolbar
 $yii_emulate_prepare = true;
 $yii_enable_profiling = true;
 $yii_enable_param_logging = true;
 $schemaCachingDuration = 0;
}else{
 $yii_emulate_prepare = false;
 $yii_enable_profiling = false;
 $yii_enable_param_logging = false;
 $schemaCachingDuration = 3600;
}
 
 
return array(
 'components'=>array(
 'db'=>array(
 'connectionString' => "mysql:host=" . DB_HOST . ";dbname=" . DB_SCHEMA,
 'username' => DB_USER,
 'password' => DB_PASSWORD,
 'charset' => 'utf8',
 'emulatePrepare' => $yii_emulate_prepare,
 'enableProfiling'=>$yii_enable_profiling,
 'enableParamLogging'=>$yii_enable_param_logging,
 'schemaCachingDuration' => $schemaCachingDuration,
 
 ),
 'dbSlave'=>array(
 'connectionString' => "mysql:host=" . DB_HOST . ";dbname=" . DB_SCHEMA,
 'username' => DB_USER_SLAVE,
 'password' => DB_PASSWORD_SLAVE,
 'charset' => 'utf8',
 'emulatePrepare' => $yii_emulate_prepare,
 'enableProfiling'=>$yii_enable_profiling,
 'enableParamLogging'=>$yii_enable_param_logging,
 'schemaCachingDuration' => $schemaCachingDuration,
 
 ),
 ),
);
 

 Herramientas de Debug e Informe de errores

En el archivo index.php se ha definido ya si se informan o no los errores de php al usuario (display_errors) y el nivel del trace del framework. Sin embargo, la extensión debug_toolbar provee información valiosa para el desarrollador.

 

// protected/config/debug_toolbar.php
return (ENVIRONMENT == 'dev')? array(
 'modules'=> array(
 // uncomment the following to enable the Gii tool
 'gii'=>array(
 'class'=>'system.gii.GiiModule',
 'password'=>'contrato',
 // If removed, Gii defaults to localhost only. Edit carefully to taste.
 'ipFilters' => array('127.0.0.1','10.10.*'),
 ),
 ),
 'components'=>array(
 'log'=>array(
 'class'=>'CLogRouter',
 'routes'=>array(
 // 'web'=>array(
 // 'class'=>'CWebLogRoute',
 // 'levels'=>'trace, info, error, warning',
 // 'categories'=>'system.db.*',
 // 'showInFireBug'=>true, //true/falsefirebug only - turn off otherwise
 // 'ignoreAjaxInFireBug'=>false
 // ),
 array(
 'class'=>'CFileLogRoute',
 'enabled'=>true,
 'filter'=>array(
 'class'=>'CLogFilter',
 'prefixSession'=>true,
 'prefixUser'=>true,
 'logUser'=>true,
 ),
 'levels'=>'error, trace, info',
 'logPath'=>dirname(dirname(__FILE__)).'/logs/',
 'logFile'=>'yii_log',
 'maxFileSize'=>2048,
 'maxLogFiles'=>10
 ),
 array(
 'class'=>'compartido.extensions.yii-debug-toolbar.YiiDebugToolbarRoute',
 'ipFilters'=>array('127.0.0.1','10.10.*'),
 'levels'=>'error, trace, info',
 )
 ),
 ),
 ),
) : array('components'=>array(
 'log'=>array(
 'class'=>'CLogRouter',
 'routes'=>array(
 array(
 'class'=>'CFileLogRoute',
 'enabled'=>true,
 'filter'=>array(
 'class'=>'CLogFilter',
 'prefixSession'=>true,
 'prefixUser'=>true,
 'logUser'=>true,
 ),
 'levels'=>'error, trace, info',
 'logPath'=>dirname(dirname(__FILE__)).'/logs/',
 'logFile'=>'yii_log',
 'maxFileSize'=>2048,
 'maxLogFiles'=>10
 ),
 ),
 ),
 ),
);

 

En el ejemplo anterior se ha incluido en la configuración la herramienta extensión debug_toolbar y el módulo Gii que deben ser solo accesibles en los ambientes de desarrollo.

 Variables de entorno en los parámetros de la aplicación.

Finalmente las variables serán incluidas en el archivo main.php y formarán parte de la aplicación.

 

// protected/config/main.php
return CMap::mergeArray(
 require_once dirname(__FILE__).'/debug_toolbar.php',
 require_once dirname(__FILE__).'/db.php',
 array(
 'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
 'name'=>'Monitor',
 'defaultController' => 'Site',
 // preloading 'log' component
 'preload'=>array('log'),
 
 // using Yii::app()->params['paramName']
 'params'=>array(
 'urlService' => WS_URI,
 'ambiente' => ENVIRONMENT,
 ),
));
 

 Puesta en marcha.

El último punto es remplazar el proceso de identificación del ambiente de ejecución utilizando el subdominio por la constante WS_URI.

 Probar el servicio de Login.

La primera prueba es remplazar el uso del subdominio para identificar la url del WebService de login a utilizar.

 

// compartido/components/LoginWsjx
class LoginWsjx extends CUserIdentity
{
 protected $_allowed;
 public $urlService;
 
 /**
 * Prepara el servicio para consultar uno_wsj_login
 *
 * @author Fidel Aquino <fidel.aquino@consucorp.com.mx>
 * @copyright 2014-01-25
 * @access private
 * @return boolean
 */
 protected function _prepare()
 {
 
 if(!$this->urlService){
 
 $urlService = '';
 
 if (isset($_SERVER['HTTP_X_FORWARDED_HOST']) && $_SERVER['HTTP_X_FORWARDED_HOST'] != '') {
 $serverName = $_SERVER['HTTP_X_FORWARDED_HOST'];
 } elseif ($_SERVER['HTTP_HOST'] != '') {
 $serverName = $_SERVER['HTTP_HOST'];
 }
 
 if (preg_match('/desenv./', $serverName)) {
 $urlService = 'http://desenv.sistemauno.com/ws/';
 } elseif (preg_match('/homol./', $serverName)) {
 $urlService = 'https://homol.sistemauno.com/ws/';
 } else {
 $urlService = 'https://www.sistemauno.com/source/ws/';
 }
 
 $this->urlService = $urlService;
 }
 
 if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != '') {
 $this->_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
 } elseif ($_SERVER['REMOTE_ADDR'] != '') {
 $this->_ip = $_SERVER['REMOTE_ADDR'];
 } else {
 $this->_ip = CHttpRequest::getUserHostAddress();
 }
 
 $_ips = explode(',', $this->_ip);
 
 if (sizeof($_ips) > 1) {
 $this->_ip = $_ips[0];
 }
 
 return true;
 
 }
 

El componente LoginWsjx ahora puede recibir la url a la que debe consultar el servicio de login, la identificación del ambiente se mantiene por compatibilidad.

Para indicar la url al componente es necesario incluir esta propiedad en la clase LoginForm.

 

// protected/models/LoginForm.php
class LoginForm extends CFormModel
{
 public $username;
 public $password;
 public $rememberMe;
 public $urlService;
 
 public function authenticate($attribute,$params)
 {
 if (!$this->hasErrors()) {
 $this->_identity=new LoginWsjx($this->username, $this->password);
 
 // indicar la url a LoginWsjx
 $this->_identity->urlService = $this->urlService;
 
 if (!$this->_identity->authenticate()) {
 if ($this->_identity->errorCode == LoginWsjx::ERROR_NOT_ALLOWED) {
 $this->addError('password', Traductor::t('No cuenta con los permisos para acceder a la aplicación'));
 } else {
 $this->addError('password', Traductor::t('El usuario o la contraseña son incorrectos'));
 }
 }
 }
 }
 
 public function login()
 {
 if ($this->_identity===null) {
 $this->_identity=new LoginWsjx($this->username, $this->password);
 
 // indicar la url a LoginWsjx
 $this->_identity->urlService = $this->urlService;
 
 $this->_identity->authenticate();
 }
 if ($this->_identity->errorCode===LoginWsjx::ERROR_NONE) {
 $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
 Yii::app()->user->login($this->_identity, $duration);
 
 return true;
 } else {
 return false;
 }
 }
 
 

Finalmente en el controllador responsable de validar el login asignar a LoginForm la url a utilizar.

 

// protected/controllers/SiteControoler.php
 
 public function actionLogin()
 {
 if (!Yii::app()->user->isGuest) {
 $this->redirect(Yii::app()->user->returnUrl);
 }
 
 $this->layout='//layouts/no_layout';
 $model=new LoginForm;
 $model->urlService = Yii::app()->params['urlService'];
 
 

EOF!

Related content

Artículos de instrucciones
Artículos de instrucciones
Read with this
Variables de entorno identificadas
Variables de entorno identificadas
More like this
Variables Pagos Colegio MX V2
Variables Pagos Colegio MX V2
More like this
Variables Usuario
Variables Usuario
More like this
Variables WS Legacy + Periférico
Variables WS Legacy + Periférico
More like this
Variables Relatorio
Variables Relatorio
More like this