NameError (неинициализированная константная ошибка) в Rails 7

Недавно я обновил свое приложение Rails до Rails 7, и после обновления, когда я пытаюсь вызвать вызов из папки lib, я получаю эту ошибкуNameError (uninitialized constant Error)

У меня есть следующая файловая структура в папке lib

      lib
 -> a
 -> b
 -> c
 -> d
 -> error
    -> test_errors.rb

всякий раз, когда я звоню, я получаю эту ошибку, я думаю, эта ошибка связана с Zeitwerk

Может кто-нибудь, пожалуйста, помогите мне с этим

всякий раз, когда я звонюError::TestErrorsЯ получил эту ошибку, в идеале это должно работать, и поскольку оно работает в другой ветке

1 ответ

КонстантаError::TestErrorsбыл автоматически загружен в Rails 6.x. Поэтому,libкажется, находится в путях автозагрузки иlib/error/test_errors.rbкажется, определяет ожидаемую константу.

Исключением, которое вы получаете, являетсяNameError, следовательно, эта константа не загружается автоматически. Если бы это было так, вы бы получилиZeitwerk::NameError. Похоже, что доступ к этой константе осуществляется преждевременно, когда автозагрузка еще не готова.

У нас недостаточно доказательств, но вполне вероятно, что проблема просто в том, что на эту константу ссылаются во время загрузки приложения, возможно, в инициализаторе. Это устарело начиная с Rails 6.0 и удалено в Rails 7.0. Это концептуальное изменение в Rails, не связанное с Zeitwerk.

Если это так, пожалуйста, прочтите этот раздел руководства по обновлению, чтобы понять, как обновить инициализатор.

Другие вопросы по тегам