микрозаймы онлайн займы на карту займы по паспорту

Detecção de Ambiente por Domínio 3

O Laravel 4 tem um  recurso interessante para detecção de ambientes, o padrão é que o ambiente seja detectado de acordo com o hostname da máquina em que está sendo executado, seguindo a configuração padrão, perderíamos usar a seguinte técnica:

Arquivo: bootstrap/start.php

$env = $app->detectEnvironment(array(

    'producao' => array('srvproducao'),
    'local'    => array('devbox', 'devbox.localdomain')

));

ou seja, quando o hostname atual for ‘srvproducao’ aplique o ambiente ‘producao’, quando o hostname for ‘devbox’ ou ‘devbox.localdomain’ aplique o ambiente ‘local’.

Isso é muito útil quando se trabalha com vários ambientes, mas no meu caso e no caso de muitos outros desenvolvedores, coloco os ambientes no mesmo servidor, a prática mais comum que adoto é criar um subdomínio do site que estou desenvolvendo e aplicar as alterações nele, ambos rodam no mesmo servidor, com o mesmo hostname, logo a técnica acima irá sempre detectar o mesmo ambiente e não será de grande ajuda.

 

Como resolver?

É mais simples do que parece, o método detectEnvironment() pode receber como parâmetro uma função anônima (closure), logo, podemos implementar qualquer tipo de lógica macabra para aplicar o ambiente correspondente, veja um exemplo:

Arquivo: bootstrap/start.php

// Inicio do arquivo omitido

/*
* Detectar domínio no Laravel 4.1 e aplicar o ambiente correspondente
*/
$env = $app->detectEnvironment(function(){

/*
* Primeiro devemos verificar se o processo não roda via CLI, pois o Artisan
* não irá conseguir identificar a variavel $_SERVER['SERVER_NAME'];
*/
    if (php_sapi_name() != 'cli') {

    /* Verifica o domínio e retorna o ambiente correspondente.
    * Note a ausencia de da intrução "break" pois em todos os casos,
    * o comando return já irá finalizar a execução do código.
    */
        switch($_SERVER['SERVER_NAME']) {
            case 'meusite.com.br':
            case 'www.meusite.com.br':
                return 'producao';
            case 'dev.meusite.com.br':
                return 'staging';
            case 'localhost':
               return 'local';
            default:
               return 'producao';
       }
    
    // aqui fazemos o retorno do Ambiente ao Artisan
    return 'producao';
    

});

// Final do arquivo Omitido
  • Renato Moura

    Ola Diego,

    Muito legal sua dica realmente por questões financeiras “$” utilizamos o mesmo servidor.
    Porem eu gosto de utilizar outra forma para detectar o ambiente, mais simples e fica flexível para qualquer dominios ou maquina
    Utilizo variavel de ambiente no php, segue o codigo para detectar as variaveis

    $env = $app->detectEnvironment(function() {
    return getenv(‘APP_ENV’) ?: ‘production’;
    });

    A definição da variavel é feita no VirtualHost ou atraves do arquivo .htaccess

    #.htaccess

    SetEnv APP_ENV development

    #Apache

    ..
    SetEnv APP_ENV “development”

    • Diego Hernandes

      Sim Renato, também funciona muito bem, no meu caso, eu não edito o vhost diretamente, e faço o deploy de extamanete o mesmo código, incluindo o .htacess a cada deploy, então não resolve no meu caso, mas é claro, uma ótima opção

  • Kennedy Tedesco

    Há, só acrescentando ao artigo, dá pra fazer alguns “truques” no Apache como, por exemplo, avaliações condicionais:

    SetEnv APP_ENV local

    SetEnv APP_ENV production

    A avaliação do IP é opcional, coloquei apenas pra mostrar duas expressões na mesma avaliação.

    E, no arquivo global.php:

    $env = $app->detectEnvironment(function() {
    return getenv(‘APP_ENV’);
    });