【问题标题】:Sinatra session not preserved with Rack::FiberPoolSinatra 会话未使用 Rack::FiberPool 保留
【发布时间】:2011-05-30 22:50:38
【问题描述】:
请求之间不会保留会话,但我看不出我做错了什么。代码!
require 'sinatra'
require 'rack/fiber_pool'
class SessionTest < Sinatra::Base
use Rack::FiberPool
enable :sessions
set :session_secret, "foobar"
get '/' do
body { session.inspect } #This is always '{}'!
end
get '/a' do
session['user'] = "bob"
redirect '/'
end
end
run SessionTest.new
【问题讨论】:
标签:
ruby
sinatra
rack
thin
fiber
【解决方案1】:
试试这个:
require 'sinatra'
require 'rack/fiber_pool'
class SessionTest < Sinatra::Base
enable :sessions
set :session_secret, "foobar"
get '/' do
body { session.inspect } #This is always '{}'!
end
get '/a' do
session['user'] = "bob"
redirect '/'
end
end
use Rack::FiberPool
run SessionTest.new
否则 Sinatra 会在会话中间件之后建立纤程池,这不起作用。这不是错误,而是由 Rack::FiberPool 的工作方式引起的。
【解决方案2】:
原来用use Rack::Session::Cookie 替换enable :sessions 就足以让它工作。
但是为什么!?