2012-12-13 26 views
10

benim raylar uygulamadaTypeError:

session[:key] = value 

aşağıda kodu kullanarak oturumda bir değeri saklamak için çalışıyorum Ve aşağıda hatayı olsun

TypeError (no _dump_data is defined for class Proc): 
activesupport (3.2.9) lib/active_support/message_verifier.rb:53:in `dump' 
activesupport (3.2.9) lib/active_support/message_verifier.rb:53:in `generate' 
actionpack (3.2.9) lib/action_dispatch/middleware/cookies.rb:300:in `[]=' 
actionpack (3.2.9) lib/action_dispatch/middleware/session/cookie_store.rb:67:in `set_cookie' 
rack (1.4.1) lib/rack/session/abstract/id.rb:330:in `commit_session' 
rack (1.4.1) lib/rack/session/abstract/id.rb:206:in `context' 
rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call' 
actionpack (3.2.9) lib/action_dispatch/middleware/cookies.rb:341:in `call' 
activerecord (3.2.9) lib/active_record/query_cache.rb:64:in `call' 
activerecord (3.2.9) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call' 
actionpack (3.2.9) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call' 
activesupport (3.2.9) lib/active_support/callbacks.rb:405:in ` 

Herhangi bir yardım çok takdir edilmektedir.

+0

Belki alakalı itibaren

: http://stackoverflow.com/questions/4668030/how-to-resolve-marshal-dump-no-marshal-dump-is-defined-for-class -proc hatası –

cevap

2

Bu değer nedir? Bu karmaşık bir nesne mi? Aktif bir kayıt örneği olabilir mi?

Bir FourSquare istemci nesnesini oturuma sokmaya çalışırken aynı sorunu yaşadım. Her seferinde yeni bir örnek oluşturmak için değiştirdim, oturumdan kurtarma yerine, ve tamam çalıştı.

4

Sizin value'unuz ya bir Proc'dir ya da içinde Proc içersinde bir yerdedir. Prosesler ve lambdalar kapanmış oldukları için serileştirilemez/marshaled/damping edilemezler. Kapanışlar, oluşturuldukları andaki bellekte ne olduğuna bağlıdır ve bu nedenle daha sonra düzgün bir şekilde düzenlenemezler.

Bkz. this answer.

Benim durumumda ne yapacağımı bilmiyorum, Procs'a güvenmeden, görevimi gerçekleştirmenin bir yolunu bulmak zorundayım gibi görünüyor.

0

Düz enable :sessions yerine use Rack::Session::Pool kabul ettiniz mi? Rack::Sessions::Pool, tanımlanamayan nesnelerin yerel saklanmasına izin verirken, kimliğin çerezdeki nesneye depolanması için alınabilir.

Sinatra yollarında bir (n) (sınıflandırılamaz) veritabanı bağlantısını korumak için kullandım. http://www.getlaura.com/how-to-enable-sessions-with-sinatra/

require 'sinatra/base' 
require 'customer.rb' 

class SinatraApp < Sinatra::Base 

use Rack::Session::Pool 

get '/welcome' do 
    name = session[:customer].name 
    "Hello, #{name}!" 
end 

post '/:name' do 
    session[:customer] = Customer.new(params[:name]) 
    redirect '/welcome' 
end 
end