Ambiente da aplicação

2 views
Skip to first unread message

dani...@gmail.com

unread,
Jan 11, 2011, 10:48:22 AM1/11/11
to Drumon Framework
Hoje vi um framework que define o seu ambiente com base no host:

código do framework:

switch ( strtolower( $_SERVER[ 'HTTP_HOST' ] ) ) {
case 'localhost':
define( 'DEBUG', true );
define( 'SITE_ROOT', '' );
define( 'MYSQL_DB', '' );
define( 'MYSQL_HOST', 'localhost' );
define( 'MYSQL_USER', '' );
define( 'MYSQL_PASSWORD', '' );
define( 'MYSQL_PORT', null );
define( 'MYSQL_SOCKET', null );
define( 'MYSQL_TBLPREF', null );
break;

define( 'DEBUG', true );
define( 'SITE_ROOT', '' );
define( 'MYSQL_DB', '' );
define( 'MYSQL_HOST', 'localhost' );
define( 'MYSQL_USER', '' );
define( 'MYSQL_PASSWORD', '' );
define( 'MYSQL_PORT', null );
define( 'MYSQL_SOCKET', null );
define( 'MYSQL_TBLPREF', null );
break;

define( 'DEBUG', false );
define( 'SITE_ROOT', '' );
define( 'MYSQL_DB', '' );
define( 'MYSQL_HOST', 'localhost' );
define( 'MYSQL_USER', '' );
define( 'MYSQL_PASSWORD', '' );
define( 'MYSQL_PORT', null );
define( 'MYSQL_SOCKET', null );
define( 'MYSQL_TBLPREF', null );
break;

default:
die( 'Invalid environment: ' . $_SERVER[ 'HTTP_HOST' ] );
}

Gostei dessa maneira pois não é necessário alterar o ambiente toda vez que enviar o app para o servidor de produção.
Tudo bem que com o uso de sistemas de deploys essa tarefa fica transparente porem de qual quer maneira tem que programar ela.

Estou pensando em implementar algo similiar seria +- assim no enviroment.php


$envs = array(
    'localhost' => 'development',
    'danillocesar.com.br' => 'production'
);

ai por traz ele carregaria o ambiente de acordo como dominio especificado.

para quem não sabe atualmente está dessa maneira:

define('ENV','development');


O que acham?

--
-----------------------------------------
Danillo César de O. Melo - blog
Sook - http://www.sook.com.br

Beto

unread,
Jan 11, 2011, 10:54:08 AM1/11/11
to drumon-fra...@googlegroups.com
Eu acho i nteressante danilos, realmente é um saco ficar mudando :P

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Luiz Alberto S. Ribeiro [ Beto ]
http://beto.euqueroserummacaco.com






Claudio Gouveia

unread,
Jan 11, 2011, 11:31:00 AM1/11/11
to drumon-fra...@googlegroups.com
Rapaz, massa issaê facilita mais um pouco as coisas

2011/1/11 Beto <madeinn...@gmail.com>



--
Cláudio Gouveia
www.lumenws.com.br
www.corridadacerveja.com.br
Marketing / Web Developer

dani...@gmail.com

unread,
Jan 12, 2011, 11:48:37 AM1/12/11
to drumon-fra...@googlegroups.com
Fiz essa implementação mas não gostei, achei meio POG, então não fiz o merge para a branch master.


-------------
application.php
-------------
// Ambiente em que o dominio irá rodar. (padrão production)
$enviroments = array(
    'localhost' => 'development'
    //'domain_name' => 'enviroment_name'
);

-------------
index.php
-------------
if(isset($enviroments[$_SERVER['HTTP_HOST']])) {
    define('ENV',$enviroments[$_SERVER['HTTP_HOST']]);
}else{
    define('ENV','production');
}
   
include(ROOT.'/config/enviroments/'.ENV.'.php');


Não gostei do if acho e de um outro problema no nome do dominio.
www.site.com.br, site.com.br
são diferentes.

Alguma sugestão? por enquanto desanimei vou deixar parado isso até então.


2011/1/11 Claudio Gouveia <clau...@gmail.com>

Jairo Junior

unread,
Jan 12, 2011, 6:19:22 PM1/12/11
to drumon-fra...@googlegroups.com
acredito q isso deviria ficar a encargo da ferramenta de integração.

mas, realmente deveria ficar só essa linha define('ENV',$enviroments[$_SERVER['HTTP_HOST']]);

até q dá, basta remover essa história de production default
--
Atenciosamente,
Jairo Junior
Sook - Desenvolvendo Inovações.
http://www.sook.com.br

dani...@gmail.com

unread,
Jan 12, 2011, 7:31:20 PM1/12/11
to drumon-fra...@googlegroups.com
Só que dessa maneira teria que setar toda vez dois production.


$enviroments = array(
    'localhost' => 'development'
    'danillocesar.com.br' => 'production',
    'www.danillocesar.com.br' => 'production'
);

Por isso que não está direto, coloquei o default production.
É uma coisa que facilita, de um lado mais do outro complica ainda.

Mais sugestões?


2011/1/12 Jairo Junior <jairob...@gmail.com>

Jairo Junior

unread,
Jan 13, 2011, 9:26:51 AM1/13/11
to drumon-fra...@googlegroups.com
Faz uma EL para remover o www.

dani...@gmail.com

unread,
Jan 13, 2011, 10:26:21 AM1/13/11
to drumon-fra...@googlegroups.com
EL?

Expressão regular?

eu tinha feito um substr, só que não rola fazer isso no inicio da aplicação tudo passa por ela.

2011/1/13 Jairo Junior <jairob...@gmail.com>

dani...@gmail.com

unread,
Feb 16, 2011, 10:40:42 AM2/16/11
to drumon-fra...@googlegroups.com
Retornando ao tópico.

Hoje descobri como fazer o server passar uma variavel para o PHP, dessa maneira é só configurar o server para rodar o ambiente escolhido.

Basta colocar isso no virtualhost do apache no servidor de produção:

SetEnv ENVIRONMENT production

e no php fica assim:

define('ENV', isset($_SERVER['ENVIRONMENT']) ? $_SERVER['ENVIRONMENT'] : 'development');


Mas como as vezes não é possivel alterar o virtualhosts do apache e também para facilitar a vida do desenvolvedor, achei melhor colocar direto no .htaccess só que usando o SetEnvIf. (mas o recomendado é usar em seu virtualhost)

SetEnvIf Host "^seudominio.com.br" ENVIRONMENT=production



Dessa maneira sempre que o site tiver rodando no host seudominio.com.br ele irá rodar em modo de produção.

=D

Assim que eu tiver um tempo aqui jogo no repositorio isso.



Jairo Junior

unread,
Feb 22, 2011, 8:12:20 AM2/22/11
to drumon-fra...@googlegroups.com, dani...@gmail.com
Danillo, isso ficou perfeito!! Muito semelhante a forma de configuração em um context/pool. (java =D)

Beto

unread,
Feb 22, 2011, 8:25:25 AM2/22/11
to drumon-fra...@googlegroups.com, Jairo Junior, dani...@gmail.com
Esse danilo só não é mais desenrolado pq é um só :P


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Luiz Alberto S. Ribeiro [ Beto ]
Reply all
Reply to author
Forward
0 new messages