Forum: Ferret DrbServer incompatible with config.gem

Posted by Dave Anderson (digm)
on 2008-11-30 20:34
I recently upgraded to Rails 2.2.2 and refactored some of my rails code
to use the config.gem functionality. In doing so, I noticed some odd
behavior when trying to start the DrbServer. Essentially, the DrbServer
will not start unless I have the "require 'acts_as_ferret" statement
below in environment.rb. I thought the gem.config would have been
enough, but apparently not.

-- start environment.rb --

Rails::Initializer.run do |config|

[...]

  # Requires acts_as_ferret must be here, can't figure out why
  require 'acts_as_ferret'

  config.gem 'acts_as_ferret', :version => '0.4.3'
  config.gem 'ferret', :version => '0.11.6'

[...]

end

-- end environment.rb --

Here's the error message I receive when the require is left out.

-- error --

me@machina $ script/ferret_server -e production start
undefined method `acts_as_ferret' for #<Class:0x22f9bec>

-- end snip --

Any ideas if this is normal?
Posted by Chris G. (cgansen)
on 2008-12-02 23:18
I don't use the AAF gem, but do have a require statement in a 
initializer in config/intializers that pulls in acts_as_ferret. Any 
chance you can supply a more detailed back trace that sheds some light 
on what class is causing trouble? Do you also have trouble booting 
script/console?

-c-

Dave Anderson wrote:
> I recently upgraded to Rails 2.2.2 and refactored some of my rails code
> to use the config.gem functionality. In doing so, I noticed some odd
> behavior when trying to start the DrbServer. Essentially, the DrbServer
> will not start unless I have the "require 'acts_as_ferret" statement
> below in environment.rb. I thought the gem.config would have been
> enough, but apparently not.
> 
> -- start environment.rb --
> 
> Rails::Initializer.run do |config|
> 
> [...]
> 
>   # Requires acts_as_ferret must be here, can't figure out why
>   require 'acts_as_ferret'
> 
>   config.gem 'acts_as_ferret', :version => '0.4.3'
>   config.gem 'ferret', :version => '0.11.6'
> 
> [...]
> 
> end
> 
> -- end environment.rb --
> 
> Here's the error message I receive when the require is left out.
> 
> -- error --
> 
> me@machina $ script/ferret_server -e production start
> undefined method `acts_as_ferret' for #<Class:0x22f9bec>
> 
> -- end snip --
> 
> Any ideas if this is normal?
Posted by Dave Anderson (digm)
on 2008-12-03 00:19
Chris G. wrote:
> I don't use the AAF gem, but do have a require statement in a 
> initializer in config/intializers that pulls in acts_as_ferret. 

For the DrbServer to start successfully, I must include a

require 'acts_as_ferret'

...statement in my environment.rb file.

However, script/console and script/server startup just fine without the 
require statement.

> Any 
> chance you can supply a more detailed back trace that sheds some light 
> on what class is causing trouble? Do you also have trouble booting 
> script/console?

Here goes...

-- debug message --

dgm@deimos $ script/ferret_server -e test start --debug
undefined method `acts_as_ferret' for #<Class:0x22f9958>
/Library/Ruby/Gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:1833:in 
`method_missing'
/Users/dgm/Sites/www.epartment54.com/app/models/article.rb:35
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in 
`gem_original_require'
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require'
/Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:155:in 
`require'
/Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:262:in 
`require_or_load'
/Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:221:in 
`depend_on'
/Library/Ruby/Gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:133:in 
`require_dependency'
/Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:368:in 
`load_application_classes'
/Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:367:in `each'
/Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:367:in 
`load_application_classes'
/Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:365:in `each'
/Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:365:in 
`load_application_classes'
/Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:185:in 
`process'
/Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:112:in `send'
/Library/Ruby/Gems/1.8/gems/rails-2.2.2/lib/initializer.rb:112:in `run'
./script/../config/environment.rb:13
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in 
`gem_original_require'
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require'
/Library/Ruby/Gems/1.8/gems/acts_as_ferret-0.4.3/lib/server_manager.rb:39
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in 
`gem_original_require'
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require'
script/ferret_server:9

-- end debug --

-- script/ferret_server --

#!/usr/bin/env ruby

begin
  require File.join(File.dirname(__FILE__), 
'../vendor/plugins/acts_as_ferret/lib/server_manager')
rescue LoadError
  # try the gem
  require 'rubygems'
  gem 'acts_as_ferret'
  require 'server_manager' # <-- This is line 9
end

-- end script/ferret_server --

Notable points of interest:
- article.rb is a model and has a "acts_as_ferret" hook at line 35
- Line 35 of environment.rb is the "Rails::Initializer.run do |config|" 
start block. Within it I have a config.gem 'acts_as_ferret' statement.

My hunch is that config.gem is not loading things in a way that is 
compatible with DrbServer. Ideas?
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.