Попробуйте:
module Admin
module Ahoy
class EventsController < Admin::ApplicationController
end
end
end
Если это решит вашу проблему, вот почему: ваш код имеет проблему, но ваша локальная среда загружает ваши файлы в порядке, который ее избегает.
Вот пример. Создайте автономный файл Ruby со следующим содержимым:
module Admin
end
#module Admin
#module Ahoy
#end
#end
module Admin
class ApplicationController
end
end
module Ahoy
class EventsController
end
end
module Admin
class Ahoy::EventsController < Admin::ApplicationController
def self.foo
end
end
end
Если вы запустите это, вы должны увидеть ту же проблему. Теперь раскомментируйте определение для Admin::Ahoy
и запустите его снова. Не должно возникать никаких ошибок.
С комментариями для Admin::Ahoy
, Ruby достигает определения для Admin::Ahoy::EventsController
без ранее существовавшего Admin::Ahoy
. Однако у него есть модуль Ahoy
(не в пространстве имен, который также может быть выражен как ::Ahoy
), поэтому предполагается, что это тот модуль, на который вы ссылаетесь. Поэтому класс, который он пытается создать, - Ahoy::EventsController
(не важно, что вы должны находиться в пространстве имен Admin
). Проблема в том, что Ahoy::EventsController
уже существует и наследуется от Object
(по умолчанию, если вы не говорите иначе), а здесь вы говорите, что он наследует от Admin::ApplicationController
. Это несоответствие суперкласса, и именно об этом говорится в ошибке.
Возможно, ваше приложение имеет определение для Admin::Ahoy
или аналогичное. Однако это не первая загрузка в производство, и именно поэтому вы получаете ошибку в одной среде, а не в другой. Определение классов с каждым отдельно перечисленным модулем должно избежать подобных проблем в будущем.