La majoria de projectes en drupal que hem creat des de communia requereixen un manteniment, i quan creix la quantitat de projectes a mantenir es necessita una estratègia per poder fer actuacions en massa com poden ser les instal·lacions de mòduls o llibreries, actualitzacions, neteja de caches o registres per monitoritzar.
Fins la versió 8, drush permetia crear àlies i agrupar-los per fer actuacions per grup. Per exemple es podia fer un grup @autoup que permetia actualitzar els drupals que se sabia que en principi no tenien cap motiu per donar errors en la actualització.
Tot això ha entrat en revisió amb Drupal 8, en el moment en què drupal passa a seguir l’estratègia d’innovació oberta que permet la inclusió de codi no dissenyat especificament per drupal, també conegut com estratègia d’innovació Proudly Found Elsewhere(symfony, easyrdf, doctrine, twig...). Per orquestrar totes les dependències es fa via composer, i concretament a partir de drupal 8 es recomana instal·lar una estructura (scaffolding).
Això ens dóna aquests canvis en l’estructura del projecte:
En la qual on realment es gestionen les dependències és una carpeta per sobre de la de web, és en la carpeta arrel de drupal-project on executarem composer per instal·lar dependències.
Tots aquests canvis impliquen una nova perspectiva per gestionar el projecte, ja no podem basar-nos en drush, i de fet la versió de drush 9.x ja ens adverteix que instal·lar mòduls per drush està abandonat.
Com que no he trobat una eina per gestionar múltiples projectes de composer, he creat l’aplicació de consola druman amb el component de symfony console command. Així es pot fer una gestió dels projectes siguin basats en drush, o en composer.
Druman gestor de projectes en drupal
Aquest programa es basa en una llista definida en yml que estarà a ~/.druman-aliases.yml, on definim algunes propietats per cada projecte: alias, path, groups, manager.
Hi ha un exemple d’un yml a la carpeta examples:
-
alias: serà el nom amb el qual indexarem i podrem accedir al projecte.
-
Path: és la ruta del projecte, si fem servir l’estructura drupal-composer hem de donar l’arrel del projecte (no la de la web). En cas que no fem servir l’estructura drupal-composer hem de posar l’arrel de web. En cas que vulguem un alias remot hem de posar "".
-
Groups: llista de grups als que pertany el projecte, per exemple autoup si volem fer un grup d’autoactualització o hacked si volem llistar projectes en els quals hem de parar especial atenció a l’hora d’actualitzar o instal·lar mòduls. (es pot posar els noms que vulguin, els que hi han posats a l'exemple són d’exemple).
-
Manager: Quin gestor farem servir per controlar dependències:
-
drush8 Serà útil per la comanda projects:update (sense ús en comanda projects:run), fa servir el gestor drush (v8) per actualitzar seguint el procediment estandar de drupal 7(no recomenat per drupal 8).
-
drupal-composer Serà útil per la comanda projects:update (sense ús en comanda projects:run), fa servir el gestor composer per procedir amb l'actualització en estructures drupal-composer.
-
drush8-alias Serà útil quan s'actualitza (amb la comanda projects:update) i quan es criden comandes de drush (via comanda projects:run). Indicar el gestor drush8-alias és la via per mantenir un site remot(o local) definit en els àlies de drush, enlloc de reinventar la lògica dels àlies remots de drush, he optat per reaprofitar-ho. Els àlies seran tractats sense canviar al directori de projecte(ja que no està definit path) ni fent un canvi d'usuari, es fa tal com ho fan els àlies de drush(amb els possibles problemes de permisos posteriors que poden sorgir). A l'hora de fer una crida d'una comanda sempre afegirà drush @alias, per tan els àlies de drush i de druman han de coincidir, i s'haura de dir tan sols la comanda de drush, per exemple:
druman project:run -a project_x status
-
Gestió de projectes (només drupal 7) remots.
Hem de parar especial atenció que si en un projecte fem servir el manager drush8-alias, per gestionar projectes remots primer haurem de definir l’àlies remot tal com es feia sempre amb drush fins la versió 8. Això és així per no haver de re-escriure la lògica que fa servir drush per connectar a remots (Per afegir un àlies a drush hi ha informació a : https://raw.githubusercontent.com/drush-ops/drush/8.x/examples/example.aliases.drushrc.php ). Així caldrà definir l’àlies a ~/.drush/aliases.drushrc.php i a ~/.druman-aliases.yml, potser en un futur això canvia per poder tirar composers en remot.
Si definim un projecte gestionat per drush8-alias el path s’haurà de posar en blanc
alias: someexternal_com
path: ""
groups: hostingatx
manager: drush8-alias
Llistar projectes
Per volcar la llista de projectes podem fer servir:
druman projects:list
Per tal de filtrar la llista per grup o per origen(local o remot), aquesta ordre permet les següents opcions:
druman projects:list -h
Usage:
projects:list [options]
Options:
-g, --group[=GROUP] List only projects of specified group
-l, --local List only local projects
-r, --remote List only remote projects
-f, --full Show all fields from list: alias, path, management type and group.
Executant comandes a l’arrel dels projectes
A partir del llistat de projectes definits a .druman-aliases.yml podem realitzar operacions. Podem tirar una ordre a l’arrel del projecte via:
projects:run
Tindrem les mateixes opcions de filtratge que quan llistem i a més a més l’opció de seleccionar un únic alies directament. Les opcions són:
druman projects:run -h
Usage:
projects:run [options] [--] [<order>]
Arguments:
order Command to run.
Options:
-g, --group[=GROUP] Run only on these projects which are members of specified group
-a, --alias[=ALIAS] Run only on this specific alias
-l, --local List only local projects
-r, --remote List only remote projects
-all, --all Run in all alias, excluding those using drush8-alias manager, if specified no filters will be used
Abans d’executar la comanda ho farà havent canviat d’usuari al que sigui el propietari de la carpeta definida al path de l’àlies.
Executant actualitzacions dels projectes
Per actualitzar hi ha la comanda druman projects:update, que permet les mateixes opcions que la comanda projects:run .
projects:update -h
-g, --group[=GROUP] Run only on these projects which are members of specified group
-a, --alias[=ALIAS] Run only on this specific alias
-l, --local List only local projects
-r, --remote List only remote projects
-all, --all Run in all alias, excluding those using drush8-alias manager
La manera com actualitza els projectes gestionats per drush8-alias o drush8 segueix les ordres per actualitzar un drupal 7. La manera com actualitza els projectes gestionats per drupal-composer segueixen el procediment per actualitzar un drupal 8. Es pot veure els procediments a https://github.com/aleixq/druman/blob/master/src/Command/ManagerRunnerProjectsCommand.php .
Què queda pendent:
-
Remots, poder gestionar drupals remots amb composer. Potser la via seria afegir propietats ssh al .druman-aliases.yml . O igual que amb els indicats amb gestor drush8-alias definir un alias remot com explica a https://raw.githubusercontent.com/drush-ops/drush/master/examples/example.site.yml .
-
També poder afegir, treure o actualitzar projectes del .druman-aliases.yml interactivament.