Anyone else with this? I'm running into a similar situation with CarrierWave where during initialization (using unicorn for testing) I can't get it to load because Rails.root is nil and they can't join nil with a string.
Any help here would be greatly appreciated. How have others got around this? On Mar 12, 10:39 am, ChrisT <[email protected]> wrote: > I've been fighting left and right with rails 3 and bundler. There are > a few gems out there that don't work properly if the rails application > hasn't been loaded yet. factory_girl and shoulda are both examples, > even on the rails3 branch. Taking shoulda as an example, when trying > to run rake test:units I get the following error: > DEPRECATION WARNING: RAILS_ROOT is deprecated! UseRails.rootinstead. > (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)>' > > Digging a bit deeper into lib/shoulda/rails, I see this: > root = if defined?(Rails.root) &&Rails.rootRails.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}", > "*") > > So...what's happening here is whileRails.rootis defined,Rails.root > == nil, so RAILS_ROOT is used, and RAILS_ROOT==nil, which is then > being passed on to Shoulda.autoload_macros. Obviously the rails app > has yet to be initialized. With Rails3 using Bundler now, there's been > some hubub over on the Bundler side about being able to specify an > order in which the gems are required, but I'm not sure whether or not > this would solve the problem at hand. > Ultimately my questions is this: When exactly does the environment.rb > file (which actually initializes the application) get pulled in? Is > there any harm to bumping up when the app is initialized and have it > happen before the Bundler.require line in config/application.rb? I've > tried to hack bundler to specify the order myself, and have the rails > gem pulled in first, but it doesn't appear to me that requiring the > rails gem actually initializes the application. > As this line (in config/application.rb) is being called before the app > is initialized, any gem in the bundler Gemfile that requires rails to > be initialized is going to tank. > > # Auto-require default libraries and those for the current Rails > environment. Bundler.require :default, Rails.env -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

