[ruby-it] Rails: variabili globali troppo globali

Paolo Montrasio paolo a paolomontrasio.com
Mar 3 Mar 2009 19:31:38 CET


Alessandro Scolavino 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/

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
-- 
Posted via http://www.ruby-forum.com/.


More information about the Ml mailing list