Сессия Синатры не сохранена с Rack :: FiberPool - PullRequest
2 голосов
/ 31 мая 2011

Сеанс не сохраняется между запросами, хотя я не вижу, что я делаю не так. Код!

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

Ответы [ 2 ]

1 голос
/ 08 июня 2011

Попробуйте вместо этого:

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 работает.

0 голосов
/ 31 мая 2011

Оказывается, замены enable :sessions на use Rack::Session::Cookie достаточно, чтобы заставить его работать.

Но почему!?

...