Ruby Sinatra机架会话在5到10秒后丢失
我有以下设置: Sinatra应用程序通过nginx代理,nginx配置中定义了重定向: 到 我使用以下命令初始化会话的使用: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次重新加载,我可以看到会话数据,然后突
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的会话仍然有效。目录中是否有任何更改会导致重新运行以重新启动应用程序?