Trabalhando com diversos ambientes no CodeIgniter

13 de fevereiro de 2012, em Configurações, Passos Iniciais, por

O CodeIgniter é o melhor framework PHP da atualidade e, para corroborar esta informação, veremos que é possível trabalhar com diversos “ambientes” no CI. Mas o que, exatamente, isso significa?

O que são “ambientes” no CodeIgniter?

Em desenvolvimento de software – principalmente quando se trabalha com algum tipo de controle de versões – é bastante comum existirem diversos “ambientes“. Quando se desenvolve software (e sistemas e aplicações web estão aí inclusos), é desejável que determinadas configurações de seu ambiente de desenvolvimento sejam diferentes, dependendo de onde estão atualmente sendo executadas.

Por exemplo, quando se está programando, é desejável que a exibição de erros esteja habilitada. Afinal, este tipo de informação é útil para o(s) programador(es) e, como o site ainda não está “aberto ao público”, não há perigo em expor quaisquer configurações e/ou paths referentes ao projeto. Já para quando o site está “aberto”, é importante que este tipo de informação não seja exibida, já que exibe informações críticas relativas ao software e atrapalha a experiência do visitante/usuário – imagine erros de MySQL sendo exibidos para um pobre visitante que veio de uma SERP…

Geralmente existem 3 ambientes:

  • desenvolvimento. Como sugere o próprio nome, é o ambiente usado pelos desenvolvedores para a produção e aprimoramento do software.
  • homologação ou teste. Quando chegar o momento de testar o software (isso varia conforme o projeto, metodologia, equipe, etc), é neste ambiente em que isso é feito. O ambiente, além de estar disponível para “testadores oficiais” que fazem parte da equipe, também pode ser acessado por usuários escolhidos ou outras pessoas.
  • produção. Acessado pelos visitantes e “usuários finais”. É quando já de desenvolveu/aprimorou o projeto (ou alguma parte específica dele), isso já foi passado (e aprovador) no ambiente de testes e, agora, está disponível para todas as pessoas.

Essas não são nomenclaturas “oficiais” e nem os ambientes precisam se restringir a 3, mas esse é o dia-a-dia da maioria dos projetos de desenvolvimento de software e funciona muito bem, obrigado! ;-)

E, como não poderia deixar de ser, uma das características do CodeIgniter é permitir que se lide com esses diferentes ambientes e suas respectivas configurações de forma bem fácil e simples!

Como configurar ambientes no CodeIgniter

A configuração de ambientes no CodeIgniter se dá, principalmente, no arquivo index.php. Nele, logo no início, há a definição da constante ENVIRONMENT. É aqui que se define qual ambiente será usado para a execução do CI.

Logo abaixo tem um switch. Ele simplesmente checa qual é o tipo de ambiente e, dependendo do resultado, aplica diferentes configurações.

E pode parecer incrível, mas é somente isso! Somente definindo qual ambiente será usado no momento (e que vai ser configurado segundo as configurações/diretrizes definidos no switch), já temos um controle de ambientes no CodeIgniter!

Exemplo de configuração de ambientes

Como se trata de um switch simples, é possível definir qualquer coisa que se queira para os diferentes ambientes. Voltemos ao exemplo da exibição de erros segundo o ambiente. Aproveitando, vamos suprimir o salvamento de queries ao BD quando não for necessário. Veja como é simples configurar o switch:

switch (ENVIRONMENT)
{
    case 'desenvolvimento':
        error_reporting(E_ALL);
	break;
 
    case 'teste':
    case 'producao':
	error_reporting(0);
        $this->db->save_queries = FALSE;
	break;
 
	default:
	exit('O ambiente da aplicação não está definido corretamente.');
}

Então, se o ambiente estiver configurado como “desenvolvimento”, os erros serão exibidos e as queries salvas.

define('ENVIRONMENT', 'desenvolvimento');

Caso esteja definido o ambiente de “teste” ou “producao”, os erros e salvamento de queries são suprimidos.

define('ENVIRONMENT', 'teste');

Ou seja, mudando 1 palavra em 1 linha de código é possível alternar entre os diferentes ambientes (lembrando que não precisando ser somente 3, seu switch pode ter quantos você quiser) e colher os benefícios de suas respectivas configurações.

Fluxo do software controlado pelo ambiente atual

Além de definir configurações que variam conforme o ambiente em que se esteja, também é possível definir o fluxo da aplicação e/ou executar funções específicas. Trata-se, tão somente, de uma constante que é definida, portanto, nada impede que, em algum controller, tenha-se um condicional do tipo:

if (ENVIRONMENT == 'desenvolvimento')
{
    // Código somente para o ambiente de desenvolvimento
}

Conclusão

Como vimos, lidar com diferentes ambientes em desenvolvimento de software usando CodeIgniter é tão difícil quanto alterar 1 linha de código… Configurando corretamente cada ambiente, é possível garantir maior segurança, desempenho e estabilidade ao projeto, já que é possível estabelecer diretivas específicas para cada um.

E você, tem alguma dica ou configuração que gostaria de recomendar para cada ambiente? Comente!

18 comentários em "Trabalhando com diversos ambientes no CodeIgniter"

gravatar

Álvaro Rios  em 17 de fevereiro de 2012

Meus parabéns! O blog é muito bom! Comei a mexer com codeigniter hoje e já li seu blog inteiro! Continue assim!

gravatar

Tárcio Zemel  em 24 de fevereiro de 2012

Obrigado, Álvaro! Aguardo você nos próximos artigos e, qualquer sugestão, basta dizer!

gravatar

AlexFigueiredoo  em 6 de março de 2012

Eu utilizo a mesma técnica também para fazer as devidas configurações de acesso ao banco de dados, por exemplo.

Dessa forma, não preciso me preocupar em ter duas versões do arquivo config/database.php diferentes.

gravatar

Dorival Junior  em 25 de abril de 2012

Show de bola! Em testes de código, performance, debug, criação de profiles, logs, etc, da pra setar pra executár somente se a constante ENVIRONMENT == 'desenvolvimento'. Quando for 'produção' essas rotinas serão ignoradas. Algo tão simples e bastante útil. Ótimo artigo.

gravatar

Tárcio Zemel  em 25 de abril de 2012

Justamente! CodeIgniter rulez! \o/

gravatar

Tárcio Zemel  em 25 de abril de 2012

Mais um recurso fantástico do CodeIgniter que confirma que ele é o melhor framework PHP da atualidade!

gravatar

Renato  em 4 de maio de 2012

Também terminei em 1 dia. epico

gravatar

Tyler  em 12 de maio de 2012

No cakephp implementei algo dentro das páginas index.php e database.php, onde verifica se é localhost ou uma url, senao seta outras configuraçoes ;)

gravatar

Tárcio Zemel  em 12 de maio de 2012

OK…

gravatar

Netto  em 6 de julho de 2012

Teria como abordar um pouco a técnica de reconhecer o ambiente automaticamente, e mostrar como funciona as configurações no config.php alterando a primeira parte dos arrays. No mais, no mais está ótimo.

gravatar

Gustavo Baesa  em 1 de agosto de 2012

Gostaria de saber se tem em portugues.

gravatar

Patricia Lopes  em 14 de setembro de 2012

Simplesmente fantástico! Tenho aprendido muito com o blog. Obrigada mesmo.

gravatar

Tárcio Zemel  em 14 de setembro de 2012

É sempre bom quando temos muita coisa a aprender, Patricia. Espero que consiga muitas informações aqui no CodeIgniter Brasil!

Abraços!

gravatar

Tárcio Zemel  em 7 de dezembro de 2012

Obrigado, pessoal! Qualquer sugestão de artigos, me enviem um e-mail! Abraços!

gravatar

Rafael  em 28 de agosto de 2013

Não vejo muito ninguem comentar sobre isso, mas quando você seta um ENVIROMENT como por exemplo : development.
Dá para adicionar um diretorio configdevelopment com um arquivo específico, e o codigniter lê direitinho.

gravatar

Frank  em 24 de novembro de 2014

Pesquisei, pesquisei e não encontrei o que eu queria. Tenho um sistema que usa o framework Codeigniter. Estou usando um banco de dados para cada empresa, porém gostaria de utilizar a mesma página de login. Dessa forma, o usuário seleciona a empresa a qual ele deseja logar e acessa o ambiente daquela empresa, falando assim parece muito fácil, mas a página de login do Codeigniter só é exibida com o ENVIROMENT setado para padrão, ou seja, já se conecta ao banco de dados padrão para exibir a página de login. Tentei de tudo, até coloquei um Dropdown na página de login para o usuário selecionar a empresa, mas na hora de pegar essa seleção e mudar de ENVIRONMENT não funciona de jeito nenhum e sempre recai no padrão. Até tentei fazer igual o autor do post indica: colocando if (ENVIRONMENT == 'desenvolvimento')
{
// Código somente para o ambiente de desenvolvimento
}

Porém, não consegui

gravatar

saju91  em 17 de setembro de 2015

Choosing the appropriate Web design company in Bangladesh for your organization's website is a harder job, especially, if you abide in UAE and there is a basin of firms to opt from

Comente!