lunedì 25 febbraio 2008

Ottenere la revisione SVN nella vostra applicazione Rails

Se volete stampare il numero di revisione della vostra applicazione Rails su una pagina potete fare come segue:

  1. Aprite il file config/environment.rb

  2. Aggiungete questa linea
    "MY_APP_REVISION = %x[(cd "#{RAILS_ROOT}" && svn info | grep Revision | cut -c 11-)].strip"

  3. Salvate e aprite la view dove volete visualizzare il numero di revisione

  4. aggiungete la linea "<%= MY_APP_REVISION %>"


Il comando funziona come segue:

  • %x[] è simile alla funzione system() di ruby e permette di eseguire un comando in una shell e catturarne l'output

  • tutti i comandi sono rinchiusi all'interno di due parentesi tonde in modo da aprire una nuova shell esclusivamente per questo comando

  • prima mi posiziono della directory principale di rails, se ho successo, lancio il comando 'svn info' che mi ritorna tutte le informazioni sul mio repository svn

  • redirigo l'output a grep che mi filtra le linee contenenti la parola 'Revision' (in questo caso una sola), otterrò così la stringa 'Revision: 580'

  • redirigo di nuovo l'output ('Revision: 580') al comando cut che taglia una stringa. I parametri passati a cut sono '-c 11-' ovvero taglia dal carattere 11 fino al termine della linea

  • L'output ottenuto da %x[] sarà una stringa terminata da 'n', per eliminare il carattere di fine linea utilizzo il metodo standard della classe string strip().


Naturalmente questo tip funziona solo su sistemi unix-like

Ciao Piero

mercoledì 20 febbraio 2008

Sessioni vecchie e Rails 2.0

Se stupidamente, come me, avete utilizzato le sessioni nella vostra WebApp memorizzando molto più che lo stretto necessario avrete qualche problema con Rails 2.0 ricevendo errori di Cookie Overflow.

Infatti di default Rails 2.0 utilizza CookieStore per salvare le sessioni limitando così a 4Kb la dimensione massima della sessione. Per 'tamponare' questo problema potete tornare ad utilizzare il vecchio metodo di Rails 1.x: PStore.

Modificate il vostro file config/environment.rb e aggiungete questa linea:

config.action_controller.session_store = :p_store

e tutto tornerà a funzionare come prima.