Questo articolo è una guida minimale per configurare l'ambiente ideale in cui lavorare con Drupal7/Omega4 sfuttando i Ruby Gem Sass e Bundler.
Fase 0 - Preparazione
Per preparare un ambiente ideale nel quale lavorare con Omega 4 bisogna avere una serie di strumenti utili soprattutto come supporto per sviluppare in Sass. Per una disamina veloce di questi strumenti e per capire perché saranno necessari, vedere QUI.
Prima di eseguire tutte le operazioni necessarie, dobbiamo aggiornare i package presenti in Ubuntu alla loro ultima versione.
$ sudo apt-get update
Questo comando carica dal file /etc/apt/sources.list l'elenco dei package installati e ricercainformazioni sulle nuove versioni ed eventuali dipendenze: non esegue alcuna installazione.
$ sudo apt-get upgrade
Recupera le nuove versioni dei pacchetti esistenti (il medesimo elenco del comando precedente) e le installa; il comando di update precedente notifica ad apt-get quali sono le nuove versioni disponibili.
Fase 1 - RVM
Poiché Ruby viene corredato con numerosi Gem e framework di Gem i quali possono avere delle dipendenze tra di loro, è molto importante affidare la gestione dell’installazione ad un “Ruby Version Manager”.
La mia raccomandazione è quella di usare RVM per gestire le versioni: è molto diffuso, ben supportato e ricco di funzionalità. In ogni caso consiglio di non usare apt-get: il Package Manager installerà una versione non aggiornata ed a livello System (per tutti gli utenti).
Se avete una versione RVM già installata, prima di installare Ruby aggiornatela alla versione più recente:
$ rvm get stable --autolibs=enable
Innanzitutto bisogna installare Curl, uno strumento per trasferire dati da e verso un server usando un protocollo tipo FTP, HTTP, HTTPS e molti altri; infatti la maniera più comoda per installare RVM è quella di utilizzare Curl.
$ sudo apt-get install curl
Fatto questo installare RVM è semplice:
$ \curl -L https://get.rvm.io | bash -s stable
Ora è consigliabile aprire un'altra sessione di terminal per fare in modo che le nuove variabili di ambiente vengano caricate; se tutto è andato bene RVM dovrebbe andare in esecuzione automaticamente. Per verificarlo eseguire:
$ type rvm | head -n 1
che dovrebbe rispondere:
rvm is a function
Se così non fosse è perché RVM viene caricato automaticamente solo se si esegue una login shell. Per fare in modo che RVM venga caricato ad ogni istanza del terminal senza fare il login bisogna aprire in edit il file .bash_profile
$ gedit ~/.bash_profile
e copiare la riga relativa a RVM, che dovrebbe essere simile a quella sotto riportata
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
quindi aprire in edit il file .bashrc
$ sudo gedit ~/.bashrc
ed incollare la riga copiata in precedenza; infine chiudere e riaprire il terminal. La ragione per cui bisogna fare questo è che .bashrc viene eseguito ogni volta che si apre il terminal, mentre .bash_profile ogni volta che si esegue il login.
Eventualmente il comando per caricare manualmente RVM è:
$ source rvm
Alla fine, per un corretto funzionamento, è bene installare alcune dipendenze necessarie a RVM: per esempio libc6-dev che sono le librerie standard di C. Infatti, poichè Ruby è scritto in C, è molto probabile che vengano richieste in quanto servono per compilare Ruby stesso.
$ rvm requirements
---
Per completezza di informazione: si può installare Ruby direttamente con l'installazione di RVM usando il comando seguente
$ \curl -sSL https://get.rvm.io | bash -s stable --ruby
Ciò nonostante ho preferito installare le due applicazioni in fasi distinte per motivi didattici.
Fase 2 - Ruby
Per sapere quali sono le versioni Ruby conosciute da RVM eseguire
$ rvm list known
Possiamo ora intallare una o più versioni di Ruby presenti nell'elenco oppure l'ultima versione; in particolare:
- $ rvm install ruby
per installare l'ultima versione - $ rvm install ruby-1.8.7-p160
per installare una versione in elenco, ad esempio la versione 1.8.7-p160
Se decidiamo di installare l'ultima versione (rvm install ruby), con il comando
$ ruby -v
dovremmo avere come risposta
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]
che significa che è quella la versione attualmente in uso.
Per capire meglio come gestire le varie versioni installiamo anche la versione 1.9.3-p545
$ rvm install ruby-1.9.3-p545
Se ora chiediamo quale versione è in uso
$ ruby -v
otteniamo
ruby 1.9.3p545 (2014-02-24 revision 45159) [x86_64-linux]
cioè quella appena installata. Accediamo ora con una nuova shell e ripetiamo l'operazione
$ ruby -v
otteniamo
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]
Questo perché la versione di default, cioè quella che viene caricata ad ogni avvio di una nuova shell è la 2.1.1 (la prima installata). In particolare, per sapere quale versione Ruby è attualmente impostata come default digitare
$ rvm list default
e dovremmo avere come risposta
Default Ruby (for new shells)
ruby-2.1.1 [ x86_64 ]
Per cambiare la versione di default e impostarla alla 1.9.3
$ rvm --default use 1.9.3
E verifichiamo di nuovo
$ ruby -v
ruby 1.9.3p545 (2014-02-24 revision 45159) [x86_64-linux]
Accediamo ora con una nuova shell e ripetiamo l'operazione
$ ruby -v
ruby 1.9.3p545 (2014-02-24 revision 45159) [x86_64-linux]
Perfetto! Ora la 1.9.3 è la versione che viene caricata di default.
Possiamo usare temporaneamente una versione diversa da quella di default usando il comando
$ rvm use 2.1.1
Using /home/bauhouse/.rvm/gems/ruby-2.1.1
E per tornare a quella di default
$ rvm default
Come ultimo suggerimento, se vogliamo vedere la cartella in cui risiede l'installazione di Ruby attiva
$ which ruby
Per una panoramica completa dei comandi per gestire Ruby e i Ruby Gem con il framework RVM consultare il comodo sito di riferimento:
Ruby mette a disposizione una collezione di librerie per lo sviluppatore denominate Gem. Per vedere come si installano, come si gestiscono e come si aggiornano fare riferimento al paragrafo "Gem" contenuto nel documento Installazione di Ruby on Rails con Ubuntu
Più avanti ne faremo uso all'interno dei temi Omega. Per adesso verificheremo solo la presenza di Bundler (fare riferimento al paragrafo "Bundler" nel documento del link precedente).
Digitare i comandi seguenti:
$ rvm gemset use global
$ gem list
*** LOCAL GEMS ***
(…)
bundler (1.7.3)
(…)
Se nella lista dei Gem non dovesse apparire Bundler, installatelo con il comando seguente:
$ gem install bundler
Fase 3 - Drush
Drush è un comodo tool per gestire attività inerenti a Drupal in modo semplice e veloce. Drush permette di connettersi al sito drupal.org, installare Drupal, installare moduli, abilitare moduli e molto altro ancora. La maniera migliore per installare l'ultima release di Drush su sistemi Linux è quella di farlo tramite PEAR Channel.
PEAR è l'acronimo di "PHP Extension and Application Repository". PEAR fornisce:
- una libreria strutturata di codice open-source per utenti PHP
- un sistema per distribuire codice e fare manutenzione dei packages
- uno stile standard per scrivere codice PHP
- la PHP Extension Community Library (PECL)
- un sito web, una mailing list e server download per supportare la comunità PHP/PEAR.
La mission di PEAR è quella di fornire componenti riutilizzabili, innovare il PHP, fornire le "best practices" per lo sviluppo PHP ed istruire gli sviluppatori. Dopo queste brevi note introduttive installiamo PEAR
$ sudo apt-get install php-pear
Ora, usando PEAR, installiamo Drush:
$ sudo pear channel-discover pear.drush.org
$ sudo pear install drush/drush
Al termine, per verificare la versione installata
$ drush version
Se si dovesse verificare il seguente errore:
The following restricted PHP modes have non-empty values: disable_functions. This configuration is incompatible with drush.
Please check your configuration settings in /etc/php5/cli/php.ini or in your drush.ini file; see examples/example.drush.ini for details.
Praticamente, in ambiente Ubuntu 13.10, Drush notifica che sta utilizzando /etc/php5/cli/php.ini: bisogna editare questo file e commentare la riga che inizia con
"disable_functions=" per risolvere il problema.
Se si verificasse l'errore:
Drush needs to download a library from http://download.pear.php.net/package/Console_Table-1.1.3.tgz in order to function, and the attempt to download this file automatically failed because you do not have permission to write to the library directory /usr/share/php/drush/lib. To continue you will need to manually download the package from http://download.pear.php.net/package/Console_Table-1.1.3.tgz, extract it, and copy the directory into your /usr/share/php/drush/lib directory.
dobbiamo scaricare Console_Table-1.1.3.tgz dal sito indicato nell'errore (semplicemente copiando l'url in un browser), poi decomprimere il file scricato in /usr/share/php/drush/lib, ovvero:
$ cd /usr/share/php/drush/lib
$ sudo tar -xvzf ~/Downloads/Console_Table-1.1.3.tgz
Finalmente il comando dovrebbe rispondere!
$ drush version
Drush Version : 6.2.0
Eventuali aggiornamenti si possono installare con il comando
$ sudo pear upgrade drush/drush
A questo punto il comando che riporta lo stato di Drush dovrebbe dare informazioni su tutto ciò che è sotto il suo controllo:
$ drush status
PHP executable : /usr/bin/php
PHP configuration : /etc/php5/cli/php.ini
PHP OS : Linux
Drush version : 6.2.0
A questo punto ci serve una versione di Drupal 7. Ne abbiamo già una installata? Bene, in questo caso proseguiamo con l'installazione di Omega 4. Altrimenti trovate QUI una guida per farlo utilizzando, appunto, Drush.
Fase 4 - Omega 4
Per installare Omega entriamo nella cartella dei temi della versione Drupal che vogliamo usare:
$ cd drupal7_test/sites/all/themes
ed eseguirne il download
$ sudo drush dl omega
poi pulire la cache
$ drush cc all
Ora che Omega 4 è presente creiamo un sotto tema
$ sudo drush omega-wizard
Viene eseguito un wizard che chiede nell'ordine
- un nome per il nuovo tema (per esempio "Omega Test")
- il nome "machine-readable" del nuovo tema: possiamo accettare quello proposto ("omega_test")
- quale tema base utilizzare per creare il sotto tema (suggerisco di usare Omega)
- quale starterkit usare (usare l'unico presente: Default)
- inserire la cartella di destinazione dove vogliamo inserire il sotto tema
- alle domande successive rispondere sempre y[es]
Adesso il sotto tema è installato: possiamo verificare come è stato modificato l'ambiente Drush
$ drush status
...
Default theme : omega_test
...
Notiamo che il sottotema di Drupal attivo è omega_test
Probabilmente, quando nell'area admin di Drupal farete delle modifiche al sotto tema, verrà evidenziata una notifica i cui si suggerisce di esportare le impostazioni del tema nel file .info
The settings for this theme are currently served from a variable. You might want to export them to your .info file.
Per effettuare questa operazione c'è un altro wizard; per usarlo pulire innanzitutto la cache
$ drush cc all
A questo punto esportare i settings del sottotema dal db al file .info:
$ sudo drush omega-export
Il wizard chiederà di selezionare il sotto tema su cui vogliamo operare ("omega_test")
Ripulire il database dai settaggi:
$ sudo drush omega-revert
il wizard chiederà di selezionare il sotto tema su cui vogliamo operare ("omega_test")
Fase 5 - Ruby Gem
Se adesso accediamo alla cartella del sotto tema appena creato
$ cd /var/www/drupal7_test/sites/all/themes/omega
$ cd omega_test
vediamo che vengono iniziallizzati automaticamente i Ruby Gem per il sotto tema
ruby-1.9.3-p545 - #gemset created /home/bauhouse/.rvm/gems/Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo._test
ruby-1.9.3-p545 - #generating omega.omega_test wrappers...........
Se dovesse apparire il messaggio
ruby-1.9.3-p484 is not installed
bisogna installare la versione indicata se ancora non è stato fatto, cioè
$ rvm install ruby-1.9.3-p484
e poi attivarla
$ rvm --default use 1.9.3
Visualizziamo l'elenco dei Gem installati
$ rvm gemset list
gemsets for ruby-1.9.3-p545 (found in /home/bauhouse/.rvm/gems/ruby-1.9.3-p545)
(default)
global
=> omega.omega_test
Notiamo che per il nostro sotto tema che c'è solo global (global.gems), che è il package che viene installato insieme a Ruby.
N.B.
- Per sapere quali sono tutti i Gem disponibili per ogni versione di Ruby:
$ rvm gemset list_all - La cartella in cui si trovano i GemSet della versione Ruby attiva si ottiene con
$ rvm gemdir
Ora installiamo i Gem di cui avremo bisogno: Bundler (dovrebbe essere già stato in precedenza...), Sass, Comapass (per una veloce disamina sulla necessità di avere questi Gem rimando alla guida
Sass, Ruby, Gems, Compass, Susy, RVM ...
Aggiorniamo i Gem installati all'ultima versione ...
$ gem update --system
Quindi, per attivare la gestione delle versioni del Gem di Bundler, entrare nel tema (ad esempio /var/www/drupal7/sites/all/themes/omega)
$ cd /var/www/drupal7/sites/all/themes/omega
Cambiare i diritti della cartella dove installare il bundle:
$ sudo chown -R $(whoami):$(whoami) omega_test
eseguire
$ cd omega_test
$ bundle install
Verranno installati una serie di Gems, in base all'elenco che si trova nel file Gemfile; al termine troverete anche un file che si chiama Gemfile.lock che contiene le versioni attuali dei Gem installati. Questo fa si che il controllo versioni di Bundler funzioni: quando verrà rilanciato il comando "bundle install" verrà utilizzato, come sorgente delle informazioni sui Gem da installare, il nuovo file Gemfile.lock. In particolare, usando il comando
$ gem list
dovremmo trovare nell'elenco
compass (0.12.3)
rubygems-bundler (1.4.2)
rvm (1.11.3.9)
sass (3.2.14)
Un'altra maniera per verificare l'elenco dei Gem installati per il tema in oggetto è quella di eseguire il comando
$ bundle show
Infine, per vedere i parametri del Compass installato
$ compass version
Per ogni eventualità Compass/Sass può essere installato manualmente come segue:
$ gem install compass
Se si verificasse un errore contenente la stringa:
ubuntu require': cannot load such file -- sass/script/node (LoadError)
si sistema semplicamente disistallando Saas e reinstallandolo:
$ gem uninstall sass
$ gem install sass
Come ultima nota suggerisco di installare css_parser per poter sfruttare le funzionalità di Compass Stats per produrre le statistiche degli stylesheet Sass. E' possibile generare un report che conteggia le regole, le proprietà, i mixins definiti e i mixins usati sia per Sass che per CSS. Se non fosse già presente nell'elenco dei Gem installati (gem list) eseguire il comando
$ gem install css_parser