Rails - почему модель внутри RAILS_ROOT / lib не будет доступна в рабочем режиме? - PullRequest
5 голосов
/ 20 мая 2010

У меня есть класс, расположенный в папке RAILS_ROOT / lib, который я использую в одном из моих помощников, и он отлично работает в разработке.

Когда я переключаюсь на работу, приложение выдает NameError (uninitialized constant SomeHelper::SomeClass), и мне приходится загружать его вручную в помощнике:

load "#{Rails.root}/lib/some_class.rb"

module SomeHelper
  def some_method
    sc = SomeClass.new
    # blah
  end
end

У меня сложилось впечатление, что все, что находится внутри RAILS_ROOT / lib / *, должно быть доступно всему приложению - нужно ли что-то настроить, чтобы это произошло в режиме prod? спасибо.

Ответы [ 2 ]

1 голос
/ 25 мая 2010

Может потребоваться проверить различия между параметрами конфигурации между средой разработки и производственной средой: config/environments/production.rb и config/environments/development.rb.

Во время процедуры инициализации Rails вызывается load_plugins(), который загружает все подключаемые модули config.plugin_paths.Вы должны убедиться, что ваша папка lib/ включена, как в

config.plugin_paths = ["# {RAILS_ROOT} / lib / plugins", "# {RAILS_ROOT} / vendor / plugins"]

В дополнение к config.plugin_paths вы также можете назвать плагины, которые должны быть загружены в config.plugins.Если эта переменная содержит :all, то будут загружены все плагины (найдены).

(Кстати: параметры конфигурации, равные любой среде, должны быть в config/environment.rb. Любые различия между средами связаны с настройками всоответствующие .rb файлы.)

1 голос
/ 24 мая 2010

Когда вы вызываете SomeHelper :: SomeClass, механизм автозагрузки Rails попытается загрузить файл в lib / some_helper / some_class.rb

Rails не будет загружать все в lib / *, он будет пытаться загружать файлы только при возникновении ConstMissing.

...