2008-09-24 50 views
4

我刚将gentoo服务器上的ruby安装更新为ruby 1.8.6 patchlevel 287,并开始在我的一个eRuby应用程序上发生错误。在Apache的error_log文件中给出的错误是:来自cgi.rb的Ruby错误“超类错误”for cgi.rb

[error] mod_ruby: /usr/lib/ruby/1.8/cgi.rb:774: superclass mismatch for class Cookie (TypeError) 

奇怪的是,它似乎有时工作 - 但其他时候,我得到这个错误。任何任何想法?

回答

2

当您重新声明已声明的类时,显示错误很可能是因为您正在加载两个不同的cgi.rb副本。查看similar issue in Rails

9

如错误消息所示,在代码中某处使用与先前定义或打开Cookie类中使用的不同超类时,会打开Cookie类。

即使没有显式指定超仍然是一个类定义有一个超:

class Cookie 
end 

这定义了对象的超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类的定义和尝试,以确保文件总是被要求-d正确的顺序。这可能也可能不容易。 :)