Forum: Ferret DrbServer incompatible with config.gem

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
20d3f4b1e57e2340ede38df0a4395549?d=identicon&s=25 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?
5c608e6a63c1fa4052119d07e8bcb221?d=identicon&s=25 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?
20d3f4b1e57e2340ede38df0a4395549?d=identicon&s=25 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?
This topic is locked and can not be replied to.