Questo post nasce per dare una risposta alla domanda:
quale è il modo più semplice in un progetto Drupal per gestire le variabili di ambiente?
Le ultime versioni di Drupal Console includono una feature molto utile per gestire le variabili che hanno valori che possono variare tra i diversi ambienti come parametri di connessione al db o path dell’installazione.
Questo è possibile tramite una libreria che è una dipendenza di drupal-console: https://github.com/vlucas/phpdotenv.
In pratica ce lo troviamo già nelle nostre disponibilità senza fare nulla.
Vediamo quindi come utilizzarlo, anche in un progetto già avviato.
drupal dotenv:init
Nella shell ci verrà chiesto di immettere alcuni valori, come i parametri di accesso al db: nome, utente, password.
Drupal Console creerà un file .env nella root e modificherà il file web/sites/default/settings.php per fare in modo che le variabili presenti nel file .env vengano lette.
Questo è un esempio di .env
# ENV ENVIRONMENT=stage # DATABASE DATABASE_NAME=drupal DATABASE_USER=drupal DATABASE_PASSWORD=aUVOicUSmS9Zn9SiW6zB DATABASE_HOST=localhost DATABASE_PORT=3306 # PATH ROOT=/var/www/demowebsite.it/web # SETTINGS
Se lavoriamo in collaborazione con altri sviluppatori possiamo creare anche un file di distribuzione .env.dist con i valori di default da includere nel repository git.
L’utilizzo più comodo che ci viene gratis è fare in modo che anche il nostro file .aliases legga il file .env così non dobbiamo sempre settare i path quando lanciamo un comando drush, drupalconsole oppure robo:
#!/bin/bash export $(egrep -v '^#' .env | xargs) alias drush="vendor/bin/drush -r $ROOT" alias drupal="vendor/bin/drupal --root=\"$ROOT\"" alias robo="vendor/bin/robo"
Come dicevo anche il task runner Robo, può leggere le variabili di ambiente dichiarate in .env.
Ecco un semplice esempio:
/** * RoboFile constructor. */ public function __construct() { $dotenv = new \Dotenv\Dotenv(__DIR__); $dotenv->load(); $this->environment = getenv('ENVIRONMENT'); }