문제

나는 Rails 3과 Bundler와 왼쪽과 오른쪽과 싸우고 있습니다. 레일 응용 프로그램이 아직로드되지 않은 경우 제대로 작동하지 않는 보석이 몇 개 있습니다. Factory_girl과 Dooksa는 모두 Rails3 지점에서도 예입니다. 예를 들어, 달리기를 시도 할 때 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/Doota/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은 Doota.Autoload_macros로 전달됩니다. 분명히 Rails 앱은 아직 초기화되지 않았습니다. Bundler를 사용하는 Rails3에서 Bundler쪽에는 보석이 필요한 순서를 지정할 수 있다는 것에 대한 Hubub가 있었지만 이것이 문제를 해결할 것인지의 여부는 확실하지 않습니다.
궁극적으로 내 질문은 다음과 같습니다. 환경은 언제 정확히 언제 응용 프로그램을 초기화 하는가? 앱이 초기화 될 때 부딪 히고 config/application.rb의 Bundler.require 라인 전에 발생하는 경우가 있습니까? 나는 번들러를 직접 지정하기 위해 번들러를 해킹하려고 시도했고, 레일 보석을 먼저 끌어 당기도록했지만, 레일 보석이 실제로 응용 프로그램을 초기화하는 것은 나에게는 보이지 않습니다.
앱이 초기화되기 전에이 라인 (config/application.rb)에서 호출되므로 레일을 초기화 해야하는 번들 젬 파일의 보석은 탱크로 이동합니다.

# 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