#ruby-on-rails #ruby #activerecord
Вопрос:
Как указано в названии, я получаю NameError (uninitialized constant Workflow::Task)
оценку за модель, определенную по адресу app/models/workflow/task.rb
.
Я уверен, что определение модели правильное, потому что оно работает в 90% случаев, но в 10% случаев я получаю эту ошибку имени, и она выходит из строя. Я не могу воспроизвести локально, это происходит только в prod, где мы используем базу данных Amazon Aurora. Может ли это произойти, если есть проблемы с подключением к базе данных или что-то в этом роде? Любые указатели приветствуются
Использование рельсов 5.1.6.2
Комментарии:
1. Мне немного любопытно — вы определили класс как
class Workflow::Task ...
или правильно с явной вложенностью (module Workflow; class Task
)? Первое является магнитом ошибок и приводит к странным проблемам с автоматической и быстрой загрузкой. github.com/rubocop/ruby-style-guide#namespace-definition2. Эта модель загружается автоматически из потока?
3. Спасибо @max! Явное объявление модуля устраняет проблему
Ответ №1:
Из сообщения об ошибке ясно, что это не проблема, связанная с базой данных. Проще говоря, Rails не загружает ваш класс модели.
Вы могли бы попробовать следующее:
- Как прокомментировал @max, определите свой класс как
module Workflow; class Task
. - Вы можете вручную добавить файл в пути автоматической загрузки rails. Положи это в
config/application.rb
:config.autoload_paths << Rails.root.join('app/models/workflow')
- Однако это не должно быть проблемой. Rails загружает все, что находится в
app
каталоге.
- Однако это не должно быть проблемой. Rails загружает все, что находится в
`
Комментарии:
1. Извините за поздний ответ, это правильно. Определение с помощью явного определения модуля устраняет проблему