加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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),或者可以消除并发请求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读