Houston, ¡la hemos cagado! Drush al rescate

Drush al rescate

Uno de los problemas de Drupal es que muchas veces tienes que elegir entre tener la última versión del core o tener módulos estables. Y es que Drupal 8 ofrece muchas cosas, pero cuando intentas instalar módulos complicados te encuentras con versiones alfa y de desarrollo, y lo que es peor, una vez que decides que no funcionan te puedes encontrar con que no puedes deshabilitarlos. En estos casos tenemos una herramienta que hace que Drupal sea mucho más completo: Drush.

Por partes:

Vamos primero con la cagada, y es que muchas veces por querer pasarnos de listos nos encontramos con un sitio desmantelado. El tema es que quería gestionar las imágenes de forma independiente, para poder subirlas de antemano o reutilizarlas de una forma más cómoda que editando el html a pelo. Mirando entre los módulos de Drupal, encontré que Media iba a ser completamente rehecho así que decidí echarle un ojo.

Primero vamos con las dependencias:

File Entity
Entity Browser
Entity Embed

Así que vamos a ir instalando los módulos uno a uno, pero claro, estos módulos también tienen sus dependencias:

  1. Entity Browser
  2. Entity Embed
  3. Dropzonejs
  4. Embed

Y para más INRI nos encontraremos con que tendremos que instalar librerías de javascript aparte:

  1. dropzone.js
  2. imagesloaded
  3. masonry

Instalando módulos:

Voy a poner todo el chorongo de ficheros a instalar en el servidor de seguido, yo personalmente recomiendo activar los módulos uno a uno, ya que si se produce un error nos será mucho más fácil acotarlo:

wget https://ftp.drupal.org/files/projects/file_entity-8.x-2.0-beta3.tar.gz
tar -zxvf file_entity-8.x-2.0-beta3.tar.gz
rm -rf file_entity-8.x-2.0-beta3.tar.gz
wget https://ftp.drupal.org/files/projects/entity_browser-8.x-1.0-beta2.tar.gz
tar -zxvf entity_browser-8.x-1.0-beta2.tar.gz
rm entity_browser-8.x-1.0-beta2.tar.gz
wget https://ftp.drupal.org/files/projects/entity_embed-8.x-1.0-beta2.tar.gz
rm entity_embed-8.x-1.0-beta2.tar.gz
wget https://ftp.drupal.org/files/projects/entity_embed-8.x-1.0-beta2.tar.gz
tar -zxvf entity_embed-8.x-1.0-beta2.tar.gz
rm entity_embed-8.x-1.0-beta2.tar.gz
wget https://ftp.drupal.org/files/projects/embed-8.x-1.0-rc3.tar.gz
tar -zxvf embed-8.x-1.0-rc3.tar.gz
rm embed-8.x-1.0-rc3.tar.gz
wget https://ftp.drupal.org/files/projects/media-8.x-1.x-dev.tar.gz
tar -zxvf media-8.x-1.x-dev.tar.gz
rm media-8.x-1.x-dev.tar.gz
wget https://ftp.drupal.org/files/projects/file_browser-8.x-1.0-alpha3.tar.gz
tar -zxvf file_browser-8.x-1.0-alpha3.tar.gz
rm file_browser-8.x-1.0-alpha3.tar.gz
wget https://ftp.drupal.org/files/projects/dropzonejs-8.x-1.0-alpha3.tar.gz
tar -zxvf dropzonejs-8.x-1.0-alpha3.tar.gz
rm dropzonejs-8.x-1.0-alpha3.tar.gz

Instalando librerías:

Cuando comenzamos con la instalación de módulos, al llegar a dropzone nos pedirá la librería y file browser hará lo propio, las librerías que pide, tampoco da explicaciones de dónde las quiere, dependiendo de la estructura de tu sitio (sitio individual o multisitio) la ubicación será distinta, en mi caso, el directorio libraries lo creé en el raiz de drupal, a la misma altura que themes y modules porque es un entorno individual, lo recomendable es hacerlo dentro de sites/default o sites/nombredelsitio y así en caso de querer montar un multisitio no arrastras ficheros que no vas a utilizar.

mkdir libraries
cd libraries/
wget https://github.com/enyo/dropzone/archive/master.zip
unzip master.zip
rm master.zip
mv dropzone-master/ dropzone
rm -rf dropzone/test/
wget https://github.com/desandro/imagesloaded/archive/master.zip
unzip master.zip
mv imagesloaded-master/ imagesloaded/
cd imagesloaded/
ls -la
rm -rf test/
rm -rf sandbox/
rm master.zip
wget https://github.com/desandro/masonry/archive/v4.1.1.tar.gz
tar -zxvf v4.1.1.tar.gz
mv masonry-4.1.1/ masonry
cd masonry/
rm -rf test
rm -rf sandbox/
ls -la
rm -rf .github/
rm v4.1.1.tar.gz

Como podéis ver, los directorios test y sandbox se borran para evitar posibles problemas de seguridad.

Con todo activado, tenemos creado un contenido fichero, un bloque para cargar ficheros y un botón para embeber el explorador de ficheros en el editor, y la verdad es que cuando funcione bien será una pasada, pero a día de hoy... bueno, es la mezcla de devs y alfas, no es de extrañar que no funcione como es debido, así que decidí desinstalarlo.

La cagada:

Y aquí es dónde viene el problema, los módulos no se dejan desinstalar, el checkbox está deshabilitado, normalmente esto ocurre cuando hay dependencias, bien de otros módulos o bien de partes de la estructura del sitio (tipos de contenido, bloques, páginas, términos...), así que comencé a eliminar todas las entidades creadas, eliminé el botón embebido del editor, el bloque y el tipo de contenido... y nada.

Sin tener nada que tenga dependencia directa con el navegador de ficheros, o al menos nada que yo sepa a juzgar por descripciones y datos del fichero install, de repente te encuentras con que tienes un sitio con un montón de módulos que no te sirven para nada pero que no puedes quitar, al parecer, según este artículo, es algo que se ha hecho a drede para evitar que se quede basura detrás en los sitios, pero que para el "enreda" o el "desarrollador" es un poco dolor de huevos.

¿Y ahora qué?

Me parece muy bonito que no se pueda desinstalar un módulo que puede dejar basura detrás, pero es impracticable para un sitio que esté vivo, pero afortunadamente, además de borrarlo "a lo bestia" (que siempre es posible pero no recomendable) se puede utilizar Drush, ¿y qué es drush? pues drush es como aquel colega que llega a tu casa con una cerveza y unas bolsas de ganchitos para echar una partida justo cuando no tienes ni la más remota idea de qué hacer en una tarde lluviosa y aburrida. Drush es una shell que permite administrar y mantener un sitio de Drupal desde línea de comandos, es la navaja suiza que todos necesitamos para ir al bosque de Drupal si queremos salirnos de la carretera.

Instalando Drush

El proceso de instalación no puede ser más sencillo, simplemente, descargar, poner en el path y disfrutar:

php -r "readfile('https://s3.amazonaws.com/files.drush.org/drush.phar');" > drush
php drush core-status
chmod +x drush
sudo mv drush /usr/local/bin
# esto último es opcional, pero aconsejable, ya que integra drush en la shell
drush init

Con drush instalado, tenemos dos opciones ahora, si llamamos a drush desde el directorio raiz de nuestra instalación de drupal, automáticamente coge los datos de configuración e interactúa con nuestro sitio, la otra opción es crear instalaciones locales de drush para cada sitio, esta opción es mucho mejor, mucho más efectiva y muchísimo más segura, pero... por ahora se escapa del alcance de este artículo, ya que estamos en un monositio, monousuario para enredos, aunque todo se andará.

Así que ahora toca impartir un poco de justicia, pero aunque estemos en plan Harry el Sucio, es bueno mirar las dependencias y hacer las cosas en orden y paso a paso para evitar hacer un siete:

cd /var/www/drupal/
drush
drush pmu file_browser_example
drush pmu file_browser
drush pmu dropzonejs_eb_widget
drush pmu entity_browser
drush pmu dropzonejs
drush pmu entity_embed
drush pmu file_entity
drush pmu embed

Con esto ya tenemos otra vez el sitio limpito, no es necesario borrar las librerías, aunque por higiene no hace daño.

Aquí podéis encontrar una presentación sobre Drush.

Aquí podéis encontrar los comandos de Drush.

Etiquetas