Trabalhando em vários ambientes com WordPress

29, maio 2012   •   (Não há comentários)   •   Autor: Thiago Dieb

Em um novo projeto que estou trabalhando, estamos utilizando WordPress como CMS para desenvolvimento de um Site bem complexo e  identificamos que precisaríamos configurar vários ambientes de trabalho. Por padrão ou na maioria das vezes sempre teremos de 2 a 4 ambientes de trabalho, com o objetivo de manter a estabilidade da aplicação durante o processo de desenvolvimento e manutenção.

Abaixo tenho a relação dos ambientes e suas definições bem resumidas, muito resumidas:

  • Desenvolvimento: agregação do que está sendo desenvolvido
  • Testes: servidor esclusivo para testes da aplicação antes de passar para o ambiente de homologação
  • Homologação: ambiente de aceitação do cliente, onde é feito os teste dos usuários
  • Produção: ambiente estável, testado e aprovado pelo cliente.

Assim foi demandado que a aplicação esteja em ambientes distintos sem precisar fazer nenhuma alteração de arquivos, dessa forma houve a necessidade de configurar o arquivo de diretivas de banco de dados e de endereços do wordpress, conhecido por wp-config.php.

A seguir tenho o exemplo do arquivo (wp-config.php) alterado.

<?php
define('APPLICATION_ENV', getenv('ENVIRONMENT') );

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
define('WP_DEBUG', true);

switch(APPLICATION_ENV){

//Ambiente de desenvolvimento
case 'dev':
   define('DB_NAME', 'db_dev');
   define('DB_USER', 'root');
   define('DB_PASSWORD', 'root');
   define('DB_HOST', '198.162.10.1');
   define('WP_SITEURL', 'http://dev.meusite/');
   define('WP_HOME', 'http://dev.meusite/');
break;

//Ambiente de teste
case 'tst':
   define('DB_NAME', 'db_tst');
   define('DB_USER', 'root');
   define('DB_PASSWORD', 'root');
   define('DB_HOST', '198.162.10.2');
   define('WP_SITEURL', 'http://tst.meusite/');
   define('WP_HOME', 'http://tst.meusite/');
break;

//Ambiente de homologação
case 'hmg':
   define('DB_NAME', 'db_hmg');
   define('DB_USER', 'root');
   define('DB_PASSWORD', 'root');
   define('DB_HOST', '198.162.10.3');
   define('WP_SITEURL', 'http://hmg.meusite/');
   define('WP_HOME', 'http://hmg.meusite/');
   ini_set('display_errors', 0);
   define('WP_DEBUG', false);
break;

//Ambiente de produção
case 'prd':
  define('DB_NAME', 'bd_prd');
  define('DB_USER', 'username_prd');
  define('DB_PASSWORD', 'password_prd');
  define('DB_HOST', '192.168.10.10');
  define('WP_SITEURL', 'http://' . $_SERVER['SERVER_NAME']);
  define('WP_HOME', 'http://' . $_SERVER['SERVER_NAME']);
  error_reporting(0);
  ini_set('display_errors', 0);
  define('WP_DEBUG', false);
break;

//Ambientes locais
case 'local':
  define('DB_NAME', 'banco');
  define('DB_USER', 'usuario');
  define('DB_PASSWORD', 'senha');
  define('DB_HOST', 'localhost');
  define('WP_SITEURL', 'http://localhost/meusite/');
  define('WP_HOME', 'http://localhost/meusite/');
break;

//Quando não há ambiente configurado
default:
  exit("Ambiente não configurado");
break;
}
//continuação da configuração normal do arquivo

Em conjunto com as alterações anteriores devemos definir a variável em cada ambiente por meio do arquivo de Vhosts do apache, ou mesmo no .htaccess do projeto, observe:

#No arquivo .htaccess
SetEnv ENVIRONMENT "prd"
#valores:'prd','tst','hmg','local'
---------------------------

#No arquivo de Vhost do apache
<VirtualHost *:80>
   <Directory /> 
     SetEnv ENVIRONMENT dev 
     #valores:'prd','tst','hmg','local'
   </Directory>
</VirtualHost>

Fica ai a dica, podemos utilizar ou implementar essa mesma idéia de várias formas, mas achei simples utilizar dessa forma.

Fontes: