ruby-on-rails – 当我有并发请求时,My Rails会话正在重置
发布时间:2020-12-17 02:27:02 所属栏目:百科 来源:网络整理
导读:我想我可能会误解Rails会话的内容,所以请耐心等待,我可能不会以最好的方式来表达我的问题. 我正在开发一个带有Ruby on Rails后端的iPhone应用程序.我有一个Web视图,默认情况下转到一个控制器的索引操作(并使用会话),在后台有一堆API调用转到不同的控制器(并
我想我可能会误解Rails会话的内容,所以请耐心等待,我可能不会以最好的方式来表达我的问题.
我正在开发一个带有Ruby on Rails后端的iPhone应用程序.我有一个Web视图,默认情况下转到一个控制器的索引操作(并使用会话),在后台有一堆API调用转到不同的控制器(并且不需要使用会话). 问题是,我的Web视图设置的会话似乎被API调用所覆盖.我的登台服务器非常慢,所以请求有很多时间相互重叠 – 我在日志中看到的基本上是这样的: Request A (first controller) starts. Session is empty. Request B (second controller) starts. Session is empty. Request A finishes. Request A has done authentication,and stored the user ID in the session. Session contains user ID. Request B finishes. Session is empty. Request C starts. Session is empty - not what I want. 现在,奇怪的是请求B不应该向会话写任何东西. 我确实有从会话中读取的过滤器之前和之后 – 例如: user = User.find_by_id(session[:id]) 要么 logger.debug session.inspect 如果我删除所有这些,那么一切都按预期工作 – 会话内容由请求A设置,并且当请求C启动时它们仍然存在. 所以.我想我错过了会议如何运作的一些内容.为什么从会话中读取会覆盖它?我应该以其他方式访问它吗?我完全走错了路,问题出在其他地方吗? 感谢您的任何见解! 解决方法
这是由rails处理会话引起的竞争条件的结果.见
http://www.paulbutcher.com/2007/05/race-conditions-in-rails-sessions-and-how-to-fix-them/
看起来你不能让并发请求修改会话可靠.解决方案是使用不同的存储会话方法(例如active_record或redis),或者可以消除并发请求. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |