Rails 3 проблема загрузки классов из lib в config / environment / development.rb - PullRequest
2 голосов
/ 13 сентября 2011

Я работаю над обновлением приложения Rails 2.3.11 до 3.0.10. Я получаю NameError в моем development.rb файле, когда я пытаюсь запустить любой из сценариев rails, например rails console, или запустить мои юнит-тесты.

Я вызываю класс, который я определил в lib, но кажется, что библиотека не была загружена, когда development.rb вызывает класс.

Я делаю что-то вроде:

config.cache_store = CustomMemcachedStore.new(Memcached.new(...))

У меня есть файл lib/custom_memcached_store.rb, который объявляет класс

class CustomMemcachedStore < ActiveSupport::Cache::Store

Я получаю следующую ошибку:

~/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:2503:in `const_missing': uninitialized constant CustomMemcachedStore (NameError)
    from ~/app_name/config/environments/development.rb:20:in `block in <top (required)>'

В application.rb я уже использую

config.autoload_paths += Dir["#{Rails.root}/lib"]

Спасибо за любую помощь, которую вы можете мне дать.

1 Ответ

1 голос
/ 13 сентября 2011

Вам нужно будет require файл явно, а не полагаться на автозагрузку.

Это происходит потому, что загрузка конфигурации среды происходит на раннем этапе процесса запуска перед настройкой путей автозагрузки.

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

initializer "my_setup", :before => "some_other_setup" do |app|
  # ...
end

К сожалению , это не один из техслучаях, когда кеш настроен здесь , а пути автозагрузки не установлены до здесь , непосредственно перед boostrap_hook.

...