Skip to main content

Recarga tus entornos con drush rebuild

Cuando  se trabaja en una web que tiene diferentes entornos como producción, stage, entornos de pruebas e integración continúa, y local, es necesario recargar habitualmente la base de datos para poder tener la información actualizada y una estructura de datos homogénea por entorno.

Además, en cada recarga hay que realizar ciertas operaciones para tener un entorno estable y seguro:

  • Sanitizar la información sensible de los usuarios (correos, números de teléfono, DNI, etc).
  • Activar módulos como reroute_email, para impedir mandar correos al exterior, stage file proxy, para poder obtener los archivos de producción, etc.
  • Desactivar módulos que no necesitamos como Update.
  • Operaciones específicas del proyecto: por ejemplo, en un ecommerce, queremos que se configuren los métodos de pago (PAyPal, Redsys) para poder hacer compras contra los servidores de pago de pruebas.

Una solución interesente sería usar el módulo Drush Rebuild (https://www.drupal.org/project/rebuild). Este módulo ofrece, mediante la configuración de aliases de drush,  recargar un entorno y configurar variables, activar y/o desactivar módulos. Además te permite engancharte al final de la ejecución para realizar las operaciones especiales de tu sitio.

El resultado final sería que con un solo comando tendríamos todas estas acciones realizadas:

drush @entorno rebuild

Instalación

Para tener el comando disponible debemos de descargar el código en ~/.drush. Esto lo hace automáticamente drush mediante el comando de descarga de módulo:

drush dl rebuild

Uso

Para poder usar el comando rebuild se necesita lo siguiente:

  • Archivo de configuración yml que define cómo quieres hacer la recarga.
  • Drush alias del entorno sobre el que quieres hacer rebuild.
  • (Opcional) Drush alias del entorno de donde se recogerá la base de datos. Esto solo sería posible si dicho entorno fuera accesible desde el entorno en el que queremos recargar.

Configuración del alias

En el alias de drush que creemos deberemos añadir, dentro de path-aliases, la opción %rebuild con el archivo yml que necesitamos.


$aliases['local'] = array(
  'uri' => 'example.me',
  'env' => 'local',
  'root' => '/carpeta/del/sitio',
  'path-aliases' => array(
    // Under path aliases, you specify the full path to the rebuild config
    // for your local environment.
    '%rebuild' => '../drush/rebuild/local.rebuild.yml',
  ),
);

Archivo de configuración yml

Este archivo permite configurar la operación de rebuild para que haga lo que necesites. Se debe de hacer uno por cada entorno donde haga falta ejecutarlo.

# Rebuild config - sql-sync and rsync example.

# General options
general:
  # Enter a description of what your rebuild file does.
  description: 'Rebuilds local development environment from remote destination'
  # Optional - specify a version of your rebuild script
  version: 1.0
  # Specify if user should be logged in after running rebuild
  uli: true

# Sync options
sync:
  # Define the default source for a sql-sync. Not valid for site-install rebuild.
  default_source: '@example.prod'
  # Define options for database sync
  sql_sync:
    create-db: 'TRUE'
    sanitize: 'sanitize-email'
    structure-tables-key: 'common'
  # Use instead of the above for pantheon rebuilding until sql-sync is supported:
  # pan_sql_sync:
  #   create-db: 'TRUE'
  # Define options for rsync
  # Either specify rsync[files_only] = 'TRUE', or define a list of rsync options
  # to pass to drush.
  rsync:
    files_only: 'TRUE'

# Drush scripts
# Specify any PHP scripts that should be executed during the rebuild process.
# The scripts will be executed using `drush php-eval`. pre_process files will be
# evaluated before drush rebuild does anything; post_process will be evaluated
# at the end of the rebuild process. The files must be in the same directory
# as your rebuild.info file.
drush_scripts:
  pre_process: 'pre_rebuild.php'
  post_process: 'after_rebuild.php'

# Tasks to run on the rebuilt Drupal site.
drupal:
  # Modules
  modules:
    enable:
      - devel
    disable:
      - update
  # Define variables to be set / deleted
  variables:
    set:
      example: 'local'

Aquí podemos ver los siguientes apartados:

  • general: Información general del proceso. Se añade la versión, una descripción, si se quiere una URL de login automático (lo que devuelve el comando uli de drush) tras acabar el proceso, etc.
  • sync: Información para sincronizar la base de datos.
  • drush_scripts: te permite indicar archivos PHP que se ejecutarán en determinados procesos. Se puede añadir un código que se ejecutará antes de comenzar, y otro código que se ejecutará al finalizar. En estas funciones dispondremos de la API de Drupal para hacer las operaciones que necesitemos.
  • drupal: permite indicar operaciones que hacer sobre el sitio: activar/desactivar módulos, añadir , quitar variables, etc.

Con esto tendremos funcionando el comando drush rebuild:

cd /carpeta/del/sitio
drush @entorno rebuild
Omar Lopesino

Omar Lopesino

Senior Drupal developer

Training courses

Face-to-face and online training for development and product teams.