Impostare le variabili di applicazione con Ruby On Rails
6 11 2007Dopo un po’ che si lavora ad un’applicazione, nasce l’esigenza di andare a scrivere da qualche parte delle informazioni che dovranno essere richiamate spesso.
Cose tipo il nome del prodotto, la versione o delle liste di valori da usare nelle select box sparse in giro per l’interfaccia.
Ovviamente, un posto per mettere queste cose potrebbe essere il database, ma è sicuramente poco comodo creare una tabella per storare degli oggetti che verranno modificati molto raramente e che potrebbero avere delle strutture molto differenti (stringa, array, hash, etc).
Un metodo immediato è quello di utilizzare delle Classi con dei metodi statici e di accedere a questi metodi senza istanziare la classe:
class AppConfigClass
def self.categorie
return ["animali","vegetali","minerali"]
end
end
Per richiamare queste informazioni, basta poi accedere al metodo della classe:
puts AppConfigClass.categorie
La classe può essere inclusa direttamente dentro il file environment.rb.
Come sempre, nel caso in cui l’operazione di recupero dei dati dovesse essere complessa (Ad esempio le categorie vengono recuperate da un web service che non cambia nel tempo), si può mettere in cache la risposta dopo la prima richiesta:
def self.categorie_da_webservice return @@categorie ||= ...procedura di recupero... end
Anche se funziona, però questo sistema non mi piace molto. Fortunatamente qualcuno ci ha pensato ed ha creato una plugin che si inserisce in maniera un po’ più elegante nella struttura di Rails.
La plugin in questione si chiama App Config e permette di definire delle chiavi direttamente all’interno della configurazione di Rails, con la possibilità di definire valori differenti per l’environment principale e per gli altri environments separati.
L’installazione è immediata:
script/plugin install http://svn.jarmark.org/rails/app_config
Una volta installata, basta aggiungere le nuove chiavi di configurazioni in questo modo:
config.app_config.categorie = [...]
Per accedere ai dati le possibilità sono poi molteplici:
AppConfig.categorie AppConfig[:categorie] oppure AppConfig.param(:categorie)
In ogni caso, quando vengono modificati i valori di configurazione, ricordate che il web server va sempre riavviato, perchè i cambiamenti avvengano, indipendentemente dal fatto che stiate lavorando nell’environment di sviluppo o di produzione.
Enjoy!







