Blog sobre desarrollo WordPress en Español Desarrollo WordPress en Español
wp-config.php

Archivo wp-config.php para diferentes entornos

Local, desarrollo, pre-producción, producción… entornos de desarrollo habituales en cualquier proyecto web.

Entornos con características diferentes, configuraciones diferentes, distintos usuarios de base de datos, distintos permisos, etc…

Aunque necesarios, probablemente en más de una ocasión nos hayan dado más de un dolor de cabeza. Y más que probable es que hayamos tirado de nuestra frase preferida: ¡en mi local funciona!

Uno de los archivos que cambiará en función del entorno es el wp-config.php, que es donde se configuran el nombre de la base de datos, usuario, contraseña, etc… (entre otras cosas que también pueden ser diferentes como el debug, table_prefix…). Estos datos suelen ser diferentes en los 4 entornos habituales de desarrollo: local, desarrollo, pre (o staging) y pro.

Es decir, el archivo wp-config.php debe ser diferente en estos 4 entornos. El problema se acentúa además cuando sois varias personas en el mismo equipo de trabajo y utilizáis control de versiones. Puede que mi usuario/clave/nombre bbdd en mi local sea diferente al de los compañeros/as, y ese archivo bajo un control de versiones se convierte en un caos.

Voy a ser sincero, desde que trabajo con WordPress bajo control de versiones he probado diferentes métodos que explico a continuación:

 

Añadir el wp-config.php a .gitignore

Fue la primera opción que probamos…y que tardamos poco en descartar. La ventaja es que ese archivo no entra dentro del control de versiones, por lo tanto cada miembro del equipo de trabajo y cada entorno de desarrollo pueden tener su fichero wp-config.php diferente.

En su ventaja está implícito su inconveniente: Al no estar bajo el control de versiones cada persona del equipo de trabajo debe descargarse a parte este archivo, o pasárselo de unos a otros. Además implica el subir manualmente por FTP a cada entorno este archivo configurado de manera independiente.

El problema es que cada persona y cada entorno tendrán un wp-config.php distinto, y si se define una constante o se realiza alguna configuración adicional, hay que avisar a todos los miembros del equipo e ir entorno por entorno realizando el mismo cambio en ese archivo.

 

Añadir un condicional en wp-config.php

Éste método simplemente implica sustituir la definición de las constantes de conexión a la base de datos, debug, caché y table_prefix por algo como esto:

Es un if donde preguntamos por en nombre del servidor: $_SERVER[‘SERVER_NAME’], y en función de éste parámetro se establecen las distintas constantes. También podríamos preguntar por $_SERVER[‘HTTP_HOST’].

De esta manera el archivo wp-config.php puede volver al control de versiones sin problema, ¿o no? Pues no del todo, la parte local puede ser diferente entre los miembros del equipo de trabajo.

Esto podemos solucionarlo con variables de entorno en el Virtual Host. Cada miembro del equipo de trabajo deberá crear una variables de entorno en su vhost, teniendo algo parecido a:

Y en el wp-config.php, dentro del if de entorno local recuperaremos los valores de estas variables de entorno:

De este modo cada miembro del equipo podrá tener configurado de manera independiente sus datos de acceso a la base de datos, y el fichero wp-config.php será el mismo para todos.

 

Una solución más “elegante”

La configuración de variables y entornos de trabajo no es algo inherente a WordPress. En muchos frameworks tienen diferentes archivos que se cargan en función de un entorno u otro. ¿Cómo podríamos aplicar esto a WordPress?

Podemos crear en la raíz de nuestra instalación un directorio llamado wp-config, y dentro incluir los ficheros:

  • wp-db-local.php
  • wp-db-dev.php
  • wp-db-pre.php
  • wp-db-pro.php

 

En cada uno de estos ficheros se configurarán las constantes correspondientes a cada entorno. Por ejemplo para wp-db-local.php quedaría algo así:

En nuestro wp-config.php incluiremos estas líneas:

Comprobaremos en qué entorno estamos y cargaremos el archivo de configuración correspondiente. De este modo podemos tener todo organizado en archivos independientes.

 

¿Y qué pasa con la línea de comandos?

Pero como no todo va a ser un camino de rosas, si optas por utilizar variables de entorno y utilizas WP-CLI en tu día a día verás que deja de funcionarte y te salta algo como esto:

Error: Error al establecer una conexión con la base de datos. Esto significa que, o la información de nombre de usuario y contraseña de tu archivo ‘wp-config.php’ es incorrecto o que no podemos contactar con el servidor de la base de datos en ”. Esto podría significar que el servidor de tu base de datos está caído.

Para solucionar esto, al menos en linux, dirígete al archivo environment que encontrarás en la carpeta /etc. Debemos configurar las constantes.

La pega es que tenemos los datos de acceso a base de datos en dos sitios diferentes: /etc/environment y virtual host. Además deberemos hacer la llamada al fichero /etc/environment desde nuestro .profile para que estén disponibles estas variables desde la línea de comandos.

Puede que también te interese

Cómo realizar un formulario de contacto personalizado en WordPress sin Plugins
Cómo realizar un formulario de contacto personalizado en WordPress sin Plugins
Para realizar un formulario de contacto personalizado en WordPress podemos utilizar los conocidos plugins contact form 7 o gravity forms. Si no queremos recurrir al…
La famosa instalación de WordPress en 30 minutos
La famosa instalación de WordPress en 30 minutos
Con este título tuve el honor de participar como ponente en la pasada WordCamp Sevilla 2016, celebrada en la Escuela de Organización Industrial (EOI). Antes…
Cómo eliminar los Shortcodes huérfanos en WordPress
Cómo eliminar los Shortcodes huérfanos en WordPress
Los shortcodes son códigos cortos que habitualmente utilizamos en el editor de texto para obtener una funcionalidad avanzada en el contenido de nuestras entradas, páginas,…
Cómo reemplazar la hoja de estilos de un plugin por una propia
Cómo reemplazar la hoja de estilos de un plugin por una propia
En muchas ocasiones nos habremos encontrado con ésta situación: Instalamos un plugin que posee sus propios estilos y clases, y no encaja bien en nuestro…