const_missing: неинициализированная константа (NameError) - PullRequest
5 голосов
/ 24 февраля 2009

Каждый раз, когда я пытаюсь запустить любой класс из каталога lib моего приложения rails 2.2 с помощью «script / runner -e production ClassName.run», я получаю следующую ошибку:

/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/commands/runner.rb:47:  
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:89:in `const_missing': uninitialized constant ClassName (NameError)"

По какой-то причине я не получаю эту ошибку, когда запускаю ее как test вместо production, и все работает нормально.

О да run - это метод класса, т.е. def self.run .... end

Есть предложения?

Ответы [ 2 ]

10 голосов
/ 24 февраля 2009

Эта ошибка возникает, когда ruby ​​не может найти класс или модуль. Я бы начал с:

  1. Проверка зависимостей гемов (одинаковы ли они для всех сред?)
  2. Найдите в своем коде все, что определяет ClassName, в частности Модули, Классы и плагины.
  3. отключить каждый из ваших плагинов в dev, любой плагин внезапно вызывает эту ошибку?
  4. если код находится в библиотеке lib, добавьте в файл production.rb инструкцию lib lib для принудительной загрузки библиотеки в производство.

Надеюсь, это поможет.

обновление Просто для суммирования комментариев это был вариант 4.

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

  1. Создайте инициализатор rails (файл .rb в разделе config / initializers) с требованием в нем
  2. Добавьте путь к lib в config / environment.rb, включив и изменив переменную config.load_paths.
1 голос
/ 28 апреля 2010

У меня было несколько определений классов (все классы STI) в одном файле. и когда я разделил определение на соответствующие файлы, он работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...