Ошибка Ruby "Несоответствие суперкласса для класса Cookie" от cgi.rb - PullRequest
4 голосов
/ 24 сентября 2008

Я только что обновил мою установку ruby ​​на моем сервере gentoo до уровня обновления 287 ruby ​​1.8.6 и начал получать сообщение об ошибке в одном из моих приложений eRuby. Ошибка, указанная в файле apache error_log:

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

Странно то, что иногда это работает, но иногда я получаю эту ошибку. У кого-нибудь есть идеи?

Ответы [ 2 ]

9 голосов
/ 17 октября 2008

Как говорится в сообщении об ошибке, где-то в коде есть открытие класса Cookie, в котором используется суперкласс, отличный от того, который использовался в предыдущем определении или открытии класса Cookie.

Даже определение класса, которое явно не указывает суперкласс, все еще имеет суперкласс:

class Cookie
end

Это определяет класс Cookie с суперклассом Object.

Я сталкивался с этой ошибкой раньше, и она возникнет, когда у вас будет какой-то код, пытающийся открыть класс без указания суперкласса, и программист предполагает, что класс (в данном случае, 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

Итак, вам, вероятно, нужно просто найти определения класса Cookie и убедиться, что файлы всегда требуют-d в правильном порядке. Это может или не может быть легко. :)

2 голосов
/ 24 сентября 2008

Эта ошибка появляется, когда вы повторно объявляете класс, который уже был объявлен, скорее всего потому, что вы загружаете две разные копии cgi.rb. Смотрите похожую проблему в Rails .

...