Ruby Sinatra机架会话在5到10秒后丢失

Ruby Sinatra机架会话在5到10秒后丢失,ruby,nginx,sinatra,rack,Ruby,Nginx,Sinatra,Rack,我有以下设置: Sinatra应用程序通过nginx代理,nginx配置中定义了重定向: 到 我使用以下命令初始化会话的使用: use Rack::Session::Pool 现在,我可以使用以下工具存储和检索会话数据: get '/make_it_so' do session[:data] = 'yes indeed.' end get '/what_gives' do session[:data] end 对于3到5次重新加载,我可以看到会话数据,然后突

我有以下设置:

Sinatra应用程序通过nginx代理,nginx配置中定义了重定向:

我使用以下命令初始化会话的使用:

use Rack::Session::Pool
现在,我可以使用以下工具存储和检索会话数据:

  get '/make_it_so' do
    session[:data] = 'yes indeed.'
  end

  get '/what_gives' do
    session[:data]
  end
对于3到5次重新加载,我可以看到会话数据,然后突然它消失为零

有人能帮忙吗

类似的问题有:


我想你的问题可能是独角兽工人。据我所知,Unicorn为每个工人创建一个应用程序实例。不幸的是,这些实例中的每一个都有一个单独的会话池,因此只能使用一个工作进程

我也有同样的问题,不是会话会随着时间的推移而丢失,而是请求被不同的工作人员处理。假设您的第一个请求命中worker 1并设置了会话键“sessionkey1”,您将得到一个具有相同值的cookie。然后,您发出第二个请求,它将命中worker 2,它将找不到您的密钥,因此将为您分配一个新会话和cookie,使您的会话看起来好像丢失了

我不知道是否有办法连接这些池,但我认为转移到外部会话存储(如Redis)会更容易。Redis通过Redis Rack gem与Rack轻松集成,因此您应该尝试一下


希望这能有所帮助。

您如何运行Sinatra应用程序?您的意思是:重新运行-unicorn-c unicorn.rb-E测试?顺便说一下,当我使用基于Rack::Session:Cookie的答案时,一切正常!使用rerun可以解释这一点。如果rerun出于某种原因重新启动应用程序,则Rack::Session::Pool中基于内存的会话将丢失。基于Cookie的会话仍然有效。目录中是否有任何更改会导致重新运行以重新启动应用程序?