# Rails: variabili globali troppo globali

**URL:** <https://www.ruby-forum.com/t/rails-variabili-globali-troppo-globali/161778>\
**Category:** IT\
**Created:** [March 2, 2009, 11:55am UTC](https://www.ruby-forum.com/t/rails-variabili-globali-troppo-globali/161778 "2009-03-02T11:55:50Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![daneel\_olivaw](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@daneel\_olivaw](https://www.ruby-forum.com/u/daneel_olivaw)\
**Post date:** [March 2, 2009, 11:55am UTC](https://www.ruby-forum.com/t/rails-variabili-globali-troppo-globali/161778/1 "2009-03-02T11:55:50Z")

</div>

Buongiorno lista.  
Ho fatto un’applicazione in rails usata in contemporanea da piÃ¹ persone  
ed avrei la necessitÃ di tenere dei dati in memoria, praticamente  
all’inizio l’operatore sceglie da un menÃ¹ a tendina una opzione e deve  
portarsela dietro per un po’, naturalmente se il valore Ã¨ memorizzato in  
@valore non posso trascinarmelo dietro per il programma, mentre se lo  
salvo in $valore mi rimane sÃ¬ per tutta l’applicazione, ma diventa una  
variabile globale anche per gli altri operatori, cosa alquanto  
sgradevole. Gli utenti entrano tramite nome e password, uso Restful  
Authentication; c’Ã¨ un sistema decente o devo aggiungere dei campi alla  
tabella users in cui memoriccare le variabili per singolo utente?

---

<div class="post-metadata">

**Author:** ![daneel\_olivaw](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@daneel\_olivaw](https://www.ruby-forum.com/u/daneel_olivaw)\
**Post date:** [March 2, 2009, 12:20pm UTC](https://www.ruby-forum.com/t/rails-variabili-globali-troppo-globali/161778/2 "2009-03-02T12:20:31Z")

</div>

On Mon, Mar 2, 2009 at 11:55 AM, Daneel O.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Ho fatto un’applicazione in rails usata in contemporanea da più persone  
> ed avrei la necessità di tenere dei dati in memoria

visto il caso d’uso che racconti direi che il modo ideale per  
memorizzare quel dato e’ la sessione (soprattutto visto che il dato da  
memorizzare e’ piccolo e.g. l’id di un oggetto, una stringa, …)

ciao,  
Luca

---

<div class="post-metadata">

**Author:** ![daneel\_olivaw](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@daneel\_olivaw](https://www.ruby-forum.com/u/daneel_olivaw)\
**Post date:** [March 2, 2009, 12:21pm UTC](https://www.ruby-forum.com/t/rails-variabili-globali-troppo-globali/161778/3 "2009-03-02T12:21:42Z")

</div>

2009/3/2 Daneel O. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> tabella users in cui memoriccare le variabili per singolo utente?  
> potresti usare session:

session[:something] = somevalue

però la session di default, cookie session store, ha capacità  
limitate; prova, se non ti va bene puoi provare a decommentare

config.action\_controller.session\_store = :active\_record\_store

dentro config/environments.rb, però non ho mai provato, non so come  
funziona.

pietro

---

<div class="post-metadata">

**Author:** ![daneel\_olivaw](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@daneel\_olivaw](https://www.ruby-forum.com/u/daneel_olivaw)\
**Post date:** [March 3, 2009, 10:25am UTC](https://www.ruby-forum.com/t/rails-variabili-globali-troppo-globali/161778/4 "2009-03-03T10:25:29Z")

</div>

Io lo uso quasi sempre, in pratica genera una tabella nuova e ci salva  
dentro i dati della session, molto comodo e molto veloce (e sopratutto  
ti puoi portare dietro grossi moli di dati)

> config.action\_controller.session\_store = :active\_record\_store
> 
> dentro config/environments.rb, perï¿½ non ho mai provato, non so come  
> funziona.

---

<div class="post-metadata">

**Author:** ![daneel\_olivaw](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@daneel\_olivaw](https://www.ruby-forum.com/u/daneel_olivaw)\
**Post date:** [March 4, 2009, 6:29pm UTC](https://www.ruby-forum.com/t/rails-variabili-globali-troppo-globali/161778/5 "2009-03-04T18:29:27Z")

</div>

Intervento da niubbo…

perche’ non si usa in questo caso:

flash[:foo] = bar ?

ciao

Il giorno 03/mar/09, alle ore 19:31, Paolo M. ha scritto:

---

<div class="post-metadata">

**Author:** ![daneel\_olivaw](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@daneel\_olivaw](https://www.ruby-forum.com/u/daneel_olivaw)\
**Post date:** [March 3, 2009, 7:31pm UTC](https://www.ruby-forum.com/t/rails-variabili-globali-troppo-globali/161778/6 "2009-03-03T19:31:38Z")

</div>

Alessandro S. wrote:

> Io lo uso quasi sempre, in pratica genera una tabella nuova e ci salva  
> dentro i dati della session, molto comodo e molto veloce (e sopratutto  
> ti puoi portare dietro grossi moli di dati)
> 
> > config.action\_controller.session\_store = :active\_record\_store
> > 
> > dentro config/environments.rb, perï¿½ non ho mai provato, non so come  
> > funziona.

Attenzione perÃ² alle race conditions tra chiamate diverse dello stesso  
browser. Sono comuni quando ci sono applicazioni ajax che vanno a  
cambiare dati in sessione e se non si sa che possono capitare si  
impazzisce per giorni a cercare misteriosi bug che fanno sparire i dati  
appena memorizzati in session[].

In due parole: la chiamata ajax 1 inizia a fare operazione e a scrivere  
dati in sessione, la chiamata ajax 2 inizia anche lei a lavorare e  
finisce prima della 1; quando la 1 finisce va a memorizzare la sua  
sessione sovrascrivendo qualsiasi cosa la 2 abbia fatto.

Per rimediare al problema esiste una variante di active\_record\_store che  
si chiama SmartSessionStore. La uso da un paio d’anni con soddisfazione  
anche se ricordo di averla customizzata un po’ (ma non il perchÃ©)

[http://svn1.hosted-projects.com/fcheung/smart\_session\_store/trunk/](http://svn1.hosted-projects.com/fcheung/smart_session_store/trunk/)

Meglio ancora Ã¨ evitare di usare la sessione se non per dati molto  
piccoli e in situazioni che non abbiano race conditions. Solo che  
all’inizio della mia esperienza in Rails venivo da Java dove in sessione  
si infila di tutto. Ora non lo faccio piÃ¹ 🙂

Paolo
