`
oliver_peng
  • 浏览: 44930 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

解决Session文件载入出错问题

阅读更多
今天早上突然出现网页显示错误,察看log文件发现如下错误信息:

Session contains objects whose class definition isn't available.
Remember to require the classes for all objects kept in the session.

首先简单介绍一下这个网站的结构:

网站架构: Ruby/Rails
部署平台: Apache2

分析原因:
网站有多个Controller, 其中一个Controller Require了一个类,new了一个对象然后将这个对象保存到Session里面,然后我跳转到另一个Controller的页面,在这个Controller中没有Require这个类,在页面中的JavaScript代码会通过Ajax定时不断调用Controller的一个方法,这个时候页面显示还一切正常,但是今天早上Apache强制所有的fcgi process重新启动,这个时候错误就发生了,因为没有Require那个类,但Session文件并没有变化(因为对浏览器而言还是同一个Session),所以一旦尝试载入Session文件就报上述错误并返回错误页面。

解决方案:
将对这个类的Require代码从一个特定的Controller移到所有Controller的父类文件application.rb。

收获:
经过这次调试发现原来Rails的Session文件实际采用的是Marshal库。如果你想直接察看Session中的内容,可以参照以下方式:

irb(main):002:0> require 'rubygems'
=> true
irb(main):003:0> require 'initializer'
=> true
irb(main):004:0> session = Marshal.load(File.open('tmp/sessions/ruby_sess.01f1a5de37e91f4c'))
0
1
分享到:
评论

相关推荐

    KODExplorer 芒果云-资源管理器

    - 选中文件时,移动到屏幕可视区域(解决上下左右选中文件滚动条不一致问题) ###ver2.51 `2014/6/22` ---- ####fix bug:(bug解决和程序优化) - 登陆多次密码输入错误验证码bug解决 - 修复漏洞:创建副本加入...

    基于Servlet的URL访问安全控制.doc

    - **文件说明**:此文件用于在初始化时载入check参数,以确定是否开启访问控制功能。该功能主要用于开发调试阶段,生产环境中通常关闭此功能。 - **关键代码**: ```java public static void checkSession...

    大名鼎鼎SWFUpload- Flash+JS 上传

     注意:该事件在Linux版本的Flash Player中存在问题,目前还无法解决。  - 传入参数  file object:文件对象  bytes complete:已经上传完毕的文件字节数  total bytes:文件总体积的字节数 [编辑本段]常见错误...

    修改WindowsXP设置技巧集之开关机篇.doc

    - 将`HungAppTimeout`的数值从5000修改为200(即程序出错时等待0.5秒)。 3. **修改服务关闭等待时间**: - 路径`HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control`。 - 将`WaitToKillServiceTimeout`的...

    freemarker总结

    options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true. ...

Global site tag (gtag.js) - Google Analytics