2013-11-26 2 views
0

Я пробовал config.autoload_paths += Dir["#{config.root}/lib/**/"] и config.eager_load_paths += Dir["#{config.root}/lib/**/"], но продолжаю получать ошибку uninitialized constant.Как загрузить материал в/lib в потоковом безопасном режиме?

Я предполагаю, что это имеет отношение к dependency_loading будучи инвалид config.threadsafe! теперь по умолчанию в Rails 4.

Так что правильный способ и нить безопасного способа нетерпеливой/автозагрузке вещь из вашего каталога/Lib?

Обновление:/Библиотека Структура

Библиотека/car.rb:

module Car 
    CAR_TYPES = %w[volvo saab] 
end 

Библиотека/автомобиль/volvo.rb:

module Car 
    class Volvo 
    end 
end 

Ошибка выброшен является NameError (uninitialized constant Car::CAR_TYPES)

Обновление 2: rails c:

Car.class 
=> Module 
Car::CAR_TYPES 
=> NameError: uninitialized constant Car::CAR_TYPES 

Обновление 3: Интересно, что Car::Volvo.new работает, но Car :: CAR_TYPES невозможно указать.

+0

Можете ли вы уточнить ошибку 'uninitialized constant'? Вы уверены, что все соглашения соблюдены, чтобы позволить постоянной загружаться? – gmile

+0

@gmile: Обновлено с более подробной информацией. Обратите внимание, что я использую 'rails-api'. – randomguy

ответ

0

Упс. Мое приложение действительно называлось Car, а также странно, что пространство имен уже использовалось Car.constants => [:Application]. Изменение module Car на что-то другое решило проблему, и я снова смог ссылаться на Cars::CAR_TYPES.

С Car уже определен (в application.rb), автозагрузка даже не пытается загрузить lib/car.rb. См. https://stackoverflow.com/a/6797707/377920 для подробного объяснения.

Смежные вопросы