28 de septiembre de 2016

Alias de drush, ¿cómo se configuran y para qué sirven?

Drush es una herramienta que nos permite configurar y, en general, administrar nuestros proyectos en Drupal desde la consola.

Hasta ahí ya la cosa suena interesante, poder actualizar los módulos y el mismo core de Drupal con un simple comando mientras estamos en la raíz de nuestro sitio:
drush up

Pero drush nos permite ir mucho más allá. Podemos crear alias de drush y ejecutar cualquier comando de drush en un servidor externo desde nuestra consola local. Por ejemplo, podemos revisar cuáles módulos necesitan actualización en nuestro servidor de producción desde nuestra consola local:
drush @sitio.produccion ups

Exacto, ese @sitio.produccion es un alias de drush, y ayuda a identificar en dónde debe ejecutar el comando ups.

¿Cómo se configuran los alias de drush?

Hay dos carpetas en donde se pueden configurar los alias de drush:
  • En la carpeta .drush en nuestro home. Por ejemplo:
    /home/usuario/.drush
  • En la carpeta sites/all/drush en nuestra instalación de Drupal.
Si se usa la primera opción, los alias de drush estarán disponibles desde cualquier lugar de nuestro computador.

Dentro de esta carpeta se deben crear archivos PHP siguiendo esta convención:
nombre_del_sitio.aliases.drushrc.php

En cada archivo se pueden agregar tantas definiciones de alias como se necesiten. Lo normal sería tener un archivo con la información de los alias de cada sitio, pero igual funcionaría si se pusieran todos los alias de todos los sitios en el mismo archivo.

Un alias se define de la siguiente forma dentro del archivo PHP antes mencionado:
$aliases['dev'] = array(
  'parent' => '@parent',
  'site' => 'misitio',
  'env' => 'dev',
  'remote-host' => 'miservidor.com',
  'remote-user' => 'miusuario',
  'root' => '/var/www/html/raiz/de/mi/sitio',
  'uri' => 'dev.misitio.com',
);

O se puede usar esta versión reducida, que es la que yo prefiero:
$aliases['misitio.dev'] = array(
  'remote-host' => 'miservidor.com',
  'remote-user' => 'miusuario',
  'root' => '/var/www/html/raiz/de/mi/sitio',
  'uri' => 'dev.misitio.com',
);

Ambos ejempos nos darían un alias para ser usado de la siguiente forma:
drush @misitio.dev status

¿Para qué sirven los alias de drush?

Ahora viene la parte interesante. Este alias que acabamos de crear no sólo nos sirve para ejecutar comandos de drush en el servidor desde nuestra consola local. También podemos aprovechar este alias para sincronizar información desde el servidor a nuestro computador y viceversa.

Por ejemplo, podemos ejecutar el siguiente comando desde la raiz de nuestra instalación de Drupal local para descargar un backup de la base de datos del servidor a nuestro computador:
drush @misitio.dev sql-dump > db.sql

Ese archivo lo podemos montar a nuestra base de datos local con:
drush sqlq --file=db.sql

También podemos sincronizar la carpeta sites/default/files del servidor a nuestro servidor para tener toda la información actualizada. Para esto podemos ejecutar el siguiente comando desde la raíz de nuestra instalación de Drupal local:
drush rsync @misitio.dev:sites/default/files sites/default/files