2008-09-24 48 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正確的順序。這可能也可能不容易。 :)