我刚刚将我的gentoo服务器上的ruby安装更新为ruby 1.8.6 patchlevel 287,并开始在我的一个eRuby应用程序上出错.apache error_log文件中给出的错误是:
[error] mod_ruby: /usr/lib/ruby/1.8/cgi.rb:774: superclass mismatch for class Cookie (TypeError)
奇怪的是它似乎有时会起作用 - 但有时候我会得到那个错误.任何想法?
正如错误消息所示,在代码中某处有一个Cookie类的开头,该类使用与先前定义或打开Cookie类中使用的超类不同的超类.
即使是未明确指定超类的类定义仍然具有超类:
class Cookie end
这将使用Object的超类定义Cookie类.
我以前遇到过这个错误,当你有一些代码尝试重新打开一个没有指定超类的类时会发生这种错误,并且程序员的假设是类(在这种情况下,Cookie)已经定义了,并且他只是重新打开它来添加一些功能.但是如果重新打开和定义的顺序相反,那么您将得到该错误,因为该类已经被定义为Object的子类,但是尝试使用不同的超类重新定义或重新打开.在irb中尝试这个:
% irb irb(main):001:0> class C < String; end => nil irb(main):002:0> class C; end => nil irb(main):003:0> exit % irb irb(main):001:0> class C; end => nil irb(main):002:0> class C < String; end TypeError: superclass mismatch for class C from (irb):2
因此,您可能只需要grep查找Cookie类的定义,并尝试确保文件始终按正确的顺序排列.这可能是也可能不容易.:)