当前位置:  开发笔记 > 编程语言 > 正文

会议越过了.Ruby on Rails

如何解决《会议越过了.RubyonRails》经验,为你挑选了1个好方法。

我有一个使用设计进行身份验证的应用程序.在红宝石1.9.2上的Rails 3,乘客在nginx之上.

这是我的问题:我已经注意到,我的会话偶尔会越过.在以一个用户身份登录时,我有时会成为另一个用户.这真是一个可怕的问题.我已经设法通过使用active_record会话存储来停止它.但我对它可能发生的地方感到难过.它在使用cookie存储和memcached存储时都会发生.我不知道从哪里开始调试.我已经完成了所有代码,而且我只是从'current_user'读取而不是写作.我没有任何代码存储会话中的项目.

任何人都可以向我提出有关在何处或如何发生这种情况的建议?

更新:

我在页面顶部设置了一个div来转储每个请求的会话内容.它不仅仅是用户切换,而是整个会话.我在会话中设置了一些虚拟变量,只是为了看看会发生什么.当会话越过时(用户A变为用户B)用户A现在看到用户B具有的虚拟变量.用户B已注销.

更新2

我在堆栈溢出中发现了另一个问题,它描述了同样的问题:在Rails中,什么可能导致用户有另一个用户的会话?

看起来它可能是一个乘客问题?但更重要的是,它怎么会发生呢?这是一个真正的大问题.我怎么制止这个?

更新3

我现在正在使用Unicorn来提供我的应用程序.我设置了config.threadsafe!并开始专门使用活动记录会话.没有更多的memcached会话.问题消失了.至少我可以停止拔头发,因为安全孔堵了.

我仍然想知道究竟是什么导致了它.大多数教程都展示了如何使用默认的产卵方法来设置乘客.当然,我认为memcached在会话管理方面优于其他方法.特别是在多应用服务器环境中.

更新4

好的,上次和最后的更新.这是使用相同memcached连接的分叉进程的问题.我通过使用dalli memcached客户端修复它,并重置了独角兽或乘客的after_fork回调中的连接.



1> 小智..:

我敢打赌,您正在使用乘客(默认)的智能生成工具,并成为Spawning Gotcha的受害者。

将您的PassengerSpawnMethod设置为“ conservative”,然后看看是否可以解决。除非您对此加以保护,否则这很容易说明内存缓存的情况。大概在设计(或您的代码)中存在类似问题。

您看到会话跨物理服务器,还是仅在一台服务器上交叉?

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有