Я получаю ошибку "несоответствие суперкласса для класса" при запуске reload!
в консоли Rails. У меня есть некоторые супер простые классы, определенные в ruby, что-то вроде этого:
# base_class.rb
module A
module B
module C
class BaseClass
def close
#stub
end
end
end
end
end
И:
# more_specific.rb
module A
module B
module C
class MoreSpecific < BaseClass
def initialize
# ...
end
def close
end
end
end
end
end
Я вижу, что на самом деле есть проблема, потому что если я сделаю это прежде чем я reload!
:
A::B::C::MoreSpecific.superclass.equal? A::B::C::BaseClass
я получаю true
, а затем, если я делаю это после того, как получаю ошибку, я получаю false
. Кроме того, object_id
из BaseClass
действительно изменяется.
Почему это может случиться? Я проверил наличие дополнительных ссылок на класс MoreSpecific
в кодовой базе, потому что я думал, что это может привести к тому, что BaseClass будет установлен как константа более одного раза, но ничего не увидел.
Что может быть причиной переключения object_id A:B:C::BaseClass
после reload!
?