Domanda

(questa è relativa al quadro Ramaze.net)

Mi sono imbattuto in alcuni veramente strani problemi durante la memorizzazione oggetti personalizzati in sessione. Ho notato che solo gli attributi sugli oggetti immediatamente memorizzati in sessione sono stati in fase di aggiornamento. Tuttavia, se questi oggetti contenuti riferimenti ad altri oggetti, di quelli richiamati oggetti non sono stati aggiornati se gli oggetti immediati contenuti in sessione non è cambiata durante la richiesta.

Questo problema solo è diventato evidente per me quando si utilizza Ramaze :: FileCache come la mia sessione di caching backend. Credo che il problema è mascherato o no un problema quando si utilizza sessioni in-memoria.

ho scoperto che il problema è a causa di una "copia superficiale" nella sessione logica trovata in Ramaze :: Session :: Hash # method_missing (Lib / ramaze / corrente / session / hash.rb).

Come un rapido test per assicurarsi che il mio pensiero è stato corretto, ho commentato fuori il "controllo di differenza", in sostanza, costringendo sessione da aggiornare ogni volta.

  def method_missing(*args, &block)
    old = @hash.dup
    result = @hash.send(*args, &block)
    #unless old == @hash
      Cache.sessions[@session.session_id] = self
    #end
    result
  end

Questo piccolo hack risolto il mio problema. Ora le mie domande sono:

  1. è una soluzione sicura e ragionevole?
  2. Devo solo evitare di memorizzare oggetti complessi / profonde nella sessione?
  3. C'è qualcosa che mi manca?
È stato utile?

Soluzione

Questo problema è stato risolto nel più recente Ramaze (2.009,04), si prega di presentare una patch al Ramaze issue tracker se il problema persiste.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top