Вопрос

Я боролся направо и налево с Rails 3 и Bundler.Есть несколько драгоценных камней, которые не работают должным образом, если приложение рельсов еще не загружено.Фабрика_девушка и должна быть примерами, даже в ветке рельсов3.Взяв за пример, при попытке запустить rake test:units Я получаю следующую ошибку:
DEPRECATION WARNING: RAILS_ROOT is deprecated! Use Rails.root instead. (called from autoload_macros at c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/autoload_macros.rb:40) c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/autoload_macros.rb:44:in 'join': can't convert #<Class:0x232b7c0> into String (TypeError) from c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/autoload_macros.rb:44:in 'block in autoload_macros' from c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/autoload_macros.rb:44:in 'map' from c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/autoload_macros.rb:44:in 'autoload_macros' from c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/rails.rb:17:in '<top (required)>'

Копнув немного глубже в lib/shoulda/rails, я вижу следующее:
root = if defined?(Rails.root) && Rails.root
Rails.root
else
RAILS_ROOT
end
# load in the 3rd party macros from vendorized plugins and gems
Shoulda.autoload_macros root, File.join("vendor", "{plugins,gems}", "*")

Итак... здесь происходит следующее: пока Rails.root определен, Rails.root == nil, поэтому используется RAILS_ROOT, и RAILS_ROOT==nil, который затем передается в Followa.autoload_macros.Очевидно, что приложение Rails еще не инициализировано.Теперь, когда Rails3 использует Bundler, со стороны Bundler возникла некоторая шумиха по поводу возможности указать порядок, в котором требуются драгоценные камни, но я не уверен, решит ли это проблему.
В конечном итоге мои вопросы таковы:Когда именно извлекается файл Environment.rb (который фактически инициализирует приложение)?Есть ли какой-либо вред от сбоев при инициализации приложения, если это происходит до строки Bundler.require в config/application.rb?Я пытался взломать упаковщик, чтобы самостоятельно указать порядок, и сначала загрузить драгоценный камень рельсов, но мне не кажется, что требование драгоценного камня рельсов фактически инициализирует приложение.
Поскольку эта строка (в config/application.rb) вызывается до инициализации приложения, любой драгоценный камень в Gemfile упаковщика, требующий инициализации рельсов, будет заблокирован.

# Auto-require default libraries and those for the current Rails environment. Bundler.require :default, Rails.env

Это было полезно?

Решение

Что ж, на самом деле отследить это было довольно легко.Все библиотеки рельсов подключаются. application.rb.Само приложение инициализируется в environment.rb.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top