Charla sobre Drush en el Drupalcamp de Buenos Aires
http://drupal.org/project/drush
Drush fue creado originalmente por Arto para Drupal 4.7 (este código alfa aún se puede encontrar en la rama DRUPAL-4-7). En Mayo del 2007, fue parcialmente reescrito y rediseñado para Drupal 5 por frando. Desde el 2008, este módulo ha sido mantenido por Moshe Weitzman, Owen Barton y Adrian Rossouw.
Drush es al mismo tiempo una interface de programacion Unix y un shell de linea de comando para Drupal. Una verdadera navaja suiza diseñada para hacer más fácil la vida de aquellos que dedican gran parte de su horario laboral sentados frente a una linea de comandos.
Background
En la actualidad es muy común que un software dependa de otros para su funcionamiento. Estas dependencias se resuelven mediante el uso de los manejadores de paquetes. Para el caso de Debian, Ubuntu y derivativos, es familiar el comando apt-get. Para los usuarios de RedHat, Fedora y derivativos, sería el comando yum. Estos comandos permiten instalar aplicaciones, desinstalarlas, actualizarlas, todo esto desde la línea de comandos. Ellos se encargan de resolver todas las dependencias y mantener el sistema en un estado estable.
En Drupal tenemos a Drush, cuya función es muy similar a la de estos comandos recién mencionados.
Principales caracteristicas de drush
- Trabajo con paquetes. El manejador de paquetes drush le permite descargar, habilitar, deshabilitar, desinstalar y actualizar módulos, temas, perfiles y traducciones desde la linea de comandos (con respecto a hacer el cafe ver mas adelante).
- Actualizaciones. Drush le permite actualizar sus modulos con un solo comando: drush update
- Tareas administrativas. Ejecutar el cron, limpiar la cache.
- Interacción con la base de datos. Nos permite exportar/importar la base de datos. Tambien podemos ejecutar consultas, ver las credenciales (usuario/contraseña) de acceso a la base de datos.
ok, ok, lo voy a comprar, que tengo que hacer ...
Instalación
¿Que versión instalo?
Originalmente Drush era un módulo de Drupal y se instalaba como uno más.
Para la versión 2.0 se hizo una importante reescritura del código y entre los resultados de dicho esfuerzo tenemos que esta nueva versión es independiente de la versión de Drupal que estemos utilizando.
En la página del proyecto solo hay dos paquetes:
La versión oficial (official release):
http://ftp.drupal.org/files/projects/drush-All-Versions-2.0.tar.gz
La versión de desarrollo (development snapshot):
http://ftp.drupal.org/files/projects/drush-All-Versions-HEAD.tar.gz
No importa que versión de Drupal este utilizando, la versión de Drush va a ser la misma en cualquier caso (ya sea la estable o la de desarrollo).
Si tenia instalado una versión anterior de drush, deberá desinstalarla y su directorio. Lo mismo para cualquier otro módulo relacionado (drush_extras, drush_mm, etc).
Instalación
1. Descargar el archivo y descompactarlo en una carpeta fuera del raiz del sitio web (/path/to/drush).
(para este ejemplo: /path/to/drush = /var/www/drush).
Nota. es solo una decisión personal del autor guardar todo lo que sea web en la carpeta /var/www. Cada usuario puede establecer el lugar que mejor se ajuste a sus necesidades.
cd wget http://ftp.drupal.org/files/projects/drush-All-Versions-2.0.tar.gz cd /var/www sudo tar zxf ~/drush-All-Versions-2.0.tar.gz
Al descompactar este archivo se crea el directorio /var/www/drush con los archivos del modulo. Borrar el .tgz si no hace falta.
2. Otorgarle permisos de ejecución al comando drush
chmod u+x /path/to/drush/drush
3. Crear enlace simbolico
Opcional, pero recomendado. Puede ser de cualquiera de las dos formas siguientes:
a) crear un enlace a drush en un directorio que este en el $PATH:
ln -s /path/to/drush/drush /usr/bin/drush
b) crear un alias para el comando drush:
alias drush='/path/to/drush/drush'
Si utiliza bash. Esto puede ir al final del archivo ~/.bashrc
¿Donde instalar drush?
Fuera del directorio raiz del sitio web. Para este ejemplo se instalo en /var/www/drush.
Para mas información consultar:
allow drush files to be installed in standard locations - http://drupal.org/node/459678
Packaging Drush for Debian - http://drupal.org/node/461488
Existe un paquete .deb disponible que lo instala en /usr/share/drush y crea de ahi un enlace simbólico en /usr/bin/drush. Disponible en:
http://debian.koumbit.net/debian/dists/unstable/main/binary-all/admin/
Tareas comunes
Trabajo con paquetes
El manejador de paquetes drush le permite descargar, habilitar, deshabilitar, desinstalar y actualizar módulos, temas, perfiles y traducciones desde la linea de comandos (con respecto a hacer el cafe ver mas adelante).
Actualizaciones
Drush le permite actualizar sus modulos con un solo comando: drush update
Tareas administrativas
Ejecutar el cron: drush cron
Limpiar la cache: drush cache clear
Interacción con la base de datos
Nos permite exportar/importar la base de datos: drush sql dump, drush sql load
Ejecutar consultas:
osvaldo@vostro:/var/www/drupal$ drush sql query "select count(*) from node;" count(*) 32
Comando básicos
Si drush se ejecuta solo aparece la ayuda de manera predeterminada con un listado de los comandos disponibles.
[ejecutar comando drush ]
osvaldo@vostro:~$ drush Ejecuta un comando de drush. Ejecute 'drush help [comando]' para visualizar ayuda especifica a dicho comando. Ejemplos: drush dl cck zen Descargar el módulo CCK y el tema Zen. drush --uri=http://example.com status Muestra el comando status para el sitio perteneciente a una instalación multisite example.com. drush help --pipe Genera la lista de comandos delimitada por espacios. Opciones: -r, --root= Directorio raiz de la instalación de Drupal que se va a utilizar (por defecto: directorio actual) -l , --uri= URI del sitio drupal que vamos a utilizar (necesaria solo en ambientes multisitios) -v, --verbose Muestra información extra durante la ejecución del comando. -d, --debug Muestra aún mas información, incluyendo mensajes internos. -q, --quiet Oculta toda salida (al ejecutar el comando en el shell). -y, --yes Asume "si' como respuesta a todas las preguntas. -s, --simulate Simula las acciones a realizar pero no ejecuta ninguna realmente. -i, --include Permite adicionar un listado de paths donde buscar comandos de drush. -c, --config Permite especificar que fichero de configuración vamos a utilizar. Consultar el ejemplo example.drushrc.php -u, --user Permite especificar el usuario con el que vamos a iniciar sesión. Puede ser un número o un nombre. -b, --backend Esconde la salida estandard y retorna solamente datos estructurados (solo se utiliza para uso interno). -p, --pipe Genera una representación compacta del comando para utilizarla en scripts. Comandos: help Imprime este mensaje de ayuda. Utilice --filter para especificar un comando en particular (e.g. --filter=pm) cron Ejecuta todos los hooks de cron. updatedb Ejecuta el proceso update.php desde la linea de comando. status Proporciona una vista general de la instalación actual de Drupal, si hubiera una (útil para confirmar si el sitio sobre el que se esta ejecutando los comandos de drush es el que nos interesa). script Ejecuta script(s) php. cache clear Borra todos los caches. watchdog show Muestra los mensajes de trazas (watchdog) recientes. Opcionalmente permite filtrar en base a un tipo determinado. watchdog delete Elimina todos los mensajes o solo aquellos de un tipo especifico. sync Sincroniza el árbol de Drupal desde o hacia otro servidor utilizando ssh y rsync. eval Evalua codigo php árbitrario después de iniciar (bootstrapping) Drupal. enable Habilita uno ó más módulos disable Deshabilita uno ó más módulos. unistall Desinstala uno ó más módulos. statusmodules Muestra el estado de los módulos (habilitados o deshabilitados). refresh Refresca la información sobre el status de actualización de los paquetes instalados. updatecode Actualiza el código del proyecto. update Actualiza el código del proyecto y aplica cualquier actualizacion requerida en la base de datos (update.php) info Muestra información sobre un proyecto. dl Descarga el core de Drupal y proyectos como CCK, Zen, etc. test mail Ejecuta todos los tests y envia los resultados por email al team. test clean Elimina las tablas y archivos remanentes de anteriores ejecuciones de test. sql conf Imprime los detalles de la conexión a la base de datos sql connect Imprime el comando mysql para conectarse a la base de datos sql dump Exporta la base de datos de drupal como un archivo SQL utilizando mysqldump sql query Ejecuta una cosulta contra la base de datos del sitio sql load Copia la base de datos hacia la base de datos del sitio. sql cli Abre una interface de linea de comandos SQL utilizando las credenciales del sitio en Drupal.
Ejemplos:
instalando (descargando)
modulos
root@vostro:/var/www/drupal# drush dl fivestar
Project fivestar (6.x-1.15) downloaded to [success]
/var/www/drupal/sites/all/modules/.
temas
root@vostro:/var/www/drupal# drush dl nitobe
Project nitobe (6.x-3.4) downloaded to [success]
/var/www/drupal/sites/all/themes/.
traducciones
root@vostro:/var/www/drupal# drush dl it
Project it (6.x-1.4) downloaded to /var/www/drupal/. [success]
root@vostro:/var/www/drupal# ls -l modules/aggregator/translations/
total 44
-rw-r--r-- 1 root root 17835 2009-02-14 13:25 modules-aggregator.es.po
-rw-r--r-- 1 1080 1080 22473 2008-12-07 14:05 modules-aggregator.it.po
Las últimas versiones de drush detectan automáticamente cuando se trata de un módulo, un tema o una traducción y son capaces de instalarlos en los directorios correspondientes (de manera predeterminada en sites/all/modules o sites/all/themes, aunque esto es modificable definiendo --destination, para mas información, ejecute drush help dl)
mas comandos:
ver las versiones disponibles de un módulo
osvaldo@vostro:~$ drush -r /var/www/drupal-6.10/ info backup_migrate
Project Release Fecha
backup_migrate 6.x-2.x-dev 2009-Jun-04
backup_migrate 6.x-1.2 2009-Ene-18
backup_migrate 6.x-1.0 2008-Ago-13
backup_migrate 6.x-1.x-dev 2009-Feb-18
instalar una versión en particular
osvaldo@vostro:~$ drush -r /var/www/drupal-6.10/ dl backup_migrate-2.x-dev
Listado de módulos vinculados con drush:
http://drupal.org/taxonomy/term/4654
Estos módulos le adicionan funcionalidad al comando drush. De esta manera, utilizando el mismo comando drush, va a tener acceso a nuevo grupo de opciones.
Drush System Manager
http://drupal.org/project/drush_sm
El Drush System Manager le permite exportar a archivos tanto variables, como el código para la creación de los cck y las views existentes en Drupal. De esta manera, puede adicionar estos archivos a un sistema de control de versiones, como subversion, y mantener un control sobre los cambios que se van haciendo en el sistema a los mismos por el resto del equipo.
opciones que ofrece este módulo:
sm list cck : list from cck with arguments:
sm export cck : export from cck with arguments: stdout or directory
sm list variables : list from variables with arguments: variable name(s) or part of a variable name
sm export variables : export from variables with arguments: stdout or directory followed by variable name(s) or part of a variable name
sm report variables : report from variables with arguments: variable name(s) or part of a variable name
sm import variables : import from variables with arguments: stdout or directory
sm list views : list from views with arguments:
sm export views : export from views with arguments: stdout or directory followed by view name(s)
Dos cosas a mencionar respecto a este módulo. La primera es que todavía se encuentra en desarrollo. Funcionalidades como la de importar los cck o las views aún es posible que tenga errores. La otra es que, a diferencia del Drush, este módulo se va a instalra como un módulo del sitio en Drupal en el cual se vaya a utilizar. A diferencia del Drush que es independiente de la instalación del Drupal, este módulo si funciona directamente con la información del sitio y por lo tanto, si depende del sitio (las views no son iguales en un D5 que en un D6).
instalacion
Puede descargar de la página del proyecto, en este caso sería este archivo:
http://ftp.drupal.org/files/projects/drush_sm-6.x-2.x-dev.tar.gz
O mejor, hágalo a la manera drush ;)
root@vostro:/var/www/drupal/sites# drush dl drush_sm
Project drush_sm (6.x-2.x-dev) downloaded to [success]
/var/www/drupal/sites/all/modules/.
root@vostro:/var/www/drupal/sites# drush enable drush_sm
The following modules will be enabled: drush_sm
Do you really want to continue? (y/n): y
Drush System Manager was enabled successfully. [ok]
root@vostro:/var/www/drupal/sites#
Si ejecutamos ahora el comando drush veremos al final los nuevos comandos disponibles:
root@vostro:/var/www/drupal/sites# drush
Execute a drush command. Run `drush help [command]` to view command-specific
help.
....
generate users Creates users.
generate taxonomy Creates taxonomy.
generate content Creates content.
sm list cck list from cck with arguments:
sm export cck export from cck with arguments: stdout or directory
sm list variables list from variables with arguments: variable name(s) or
part of a variable name
sm export variables export from variables with arguments: stdout or
directory followed by variable name(s) or part of a
variable name
sm report variables report from variables with arguments: variable name(s)
or part of a variable name
sm import variables import from variables with arguments: stdout or
directory
sm list views list from views with arguments:
sm export views export from views with arguments: stdout or directory
followed by view name(s)
DRUSH FAQ
¿Se puede utilizar drush sobre Windows?
En principio si. En la práctica, ninguno de los desarrolladores de este módulo utiliza Windows en su trabajo diario por lo que aunque "teóricamente" php es compatible sobre Windows y otros sistemas operativos, siempre existe la posibilidad de algo no funcione como debe. Sin embargo, se aceptan gustosamente parches para solucionar cualquier problema que surja :)
http://civicactions.com/blog/2009/jun/10/drush_20_released_screencast_1_...
- Inicie sesión o regístrese para enviar comentarios
