Forum: Italian Ruby user group Rails: variabili globali troppo globali

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Daneel O. (Guest)
on 2009-03-02 12:55
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?
Luca M. (Guest)
on 2009-03-02 13:20
(Received via mailing list)
On Mon, Mar 2, 2009 at 11:55 AM, Daneel O.
<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
Pietro G. (Guest)
on 2009-03-02 13:21
(Received via mailing list)
2009/3/2 Daneel O. <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
Alessandro S. (Guest)
on 2009-03-03 11:25
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.
Paolo M. (Guest)
on 2009-03-03 20:31
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_sess...

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
Tucano (Guest)
on 2009-03-04 19:29
(Received via mailing list)
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:
This topic is locked and can not be replied to.