Current Edge breaks plugin loads

In revision 5720, NZKoz checked in some stuff that is supposed to use
config.plugins for loading plugin s in the right order. I think he
intended it to keep working the way it is if config.plugins is not set,
but at least for me, no plugins are being loaded at all with this
change.

I was able to fix it temporarily by doing this (sorry if the patch file
is kinda screwy, I don't do this very often):

Index: railties/lib/initializer.rb

In revision 5720, NZKoz checked in some stuff that is supposed to use
config.plugins for loading plugin s in the right order. I think he
intended it to keep working the way it is if config.plugins is not set,
but at least for me, no plugins are being loaded at all with this
change.

I've reverted the change to both edge and 1-2, James, if you can PDI
a fix, that'd be hot :).

I'm on it.

Hi Martin,

The fix you've provided (essentially reverting a part of
http://dev.rubyonrails.org/ticket/6842) will add *all* lib directories
from plugins to the load path, regardless of config.plugins. Can you
please do the following:

a) ensure that you're using a fresh copy of Rails 1.2/trunk, with no
modifications on your side
b) detail which plugins you are using - if your plugins have
interdependencies, that could be an important clue
c) open up a console and give me the output of "puts $LOAD_PATH"

That should be a good starting point. I'm keen to get this fixed ASAP :slight_smile:

James

> In revision 5720, NZKoz checked in some stuff that is supposed to use
> config.plugins for loading plugin s in the right order. I think he
> intended it to keep working the way it is if config.plugins is not set,
> but at least for me, no plugins are being loaded at all with this
> change.

Following up on this, I can't replicate Martin's problem. Here are the
steps I took to try:

1. create new rails application

  $ cd /tmp
  $ rails test_plugin_loading
  < ... rails project creation output ... >
  $ cd test_plugin_loading

2. check out the version of Rails with patches from #6851 and #6842 installed

  $ svn co -r 5720 http://dev.rubyonrails.org/svn/rails/trunk vendor/rails

3. create some sample plugins

  $ mkdir vendor/plugins/plugin_a
  $ mkdir vendor/plugins/plugin_a/lib
  $ echo "puts 'loading plugin a'" > vendor/plugins/plugin_a/init.rb
  $ mkdir vendor/plugins/plugin_b
  $ echo "puts 'loading plugin b'" > vendor/plugins/plugin_b/init.rb

4. load up script/console

  $ script/console
  Loading development environment.
  loading plugin A
  loading plugin B
  >> puts $LOAD_PATH
  < ... snipped to show the relevant parts ... >
  script/../config/../config/../components
  script/../config/../config/../config
  script/../config/../config/../lib
  script/../config/../config/../vendor/plugins/plugin_a/lib/
  script/../config/../config/../vendor
  /private/tmp/test_loading_plugins/vendor/rails/railties/builtin/rails_info/
  script/../config/../config/../vendor/rails/railties
  script/../config/../config/../vendor/rails/railties/lib
  < ... etc ... >

  ... as you'd expect, both plugins are loaded, and plugin_a/lib
appears in the load path. Editing config/environment.rb to include
"config.plugins = []", and as expected, no plugins load:

  >> exit
  $ script/console
  Loading development environment.
  >>

In this case, no plugins have been loaded, and accordinly
vendor/plugins/plugin_a/lib does NOT appear in the $LOAD_PATH.

My only conclusion here is that the patch works fine, and that the
setup Martin was using somehow relied on the previously-broken
behaviour of having all plugin lib directories in the $LOAD_PATH
before any plugins are actually loaded. I'd suggest that Martin makes
use of config.plugins to fix his application.

It's worth noting that #6851 doesn't affect this issue - can we reapply that?

Hi James,

I am by no means a Rails Core expert, so yes, my analysis might be
wrong. However, after Koz's fix yesterday, I couldn't start up mongrel
anymore, because it was complaining about missing constants (don't have
the exact error message and trace handy).

This happened for some of our own plugins, but also for common plugins
like ExceptionNotifier. We were testing this on a clean version of Edge
Rails, without any special patches.

Martin

Here's the error I am seeing, in this case with the exception
notifier plugin:

=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
Exiting
./script/../config/../vendor/rails/activesupport/lib/active_support/
dependencies.rb:263:in `load_missing_constant': uninitialized
constant ExceptionNotifier (NameError)
         from ./script/../config/../vendor/rails/activesupport/lib/
active_support/dependencies.rb:447:in `const_missing'
         from ./script/../config/../vendor/rails/activesupport/lib/
active_support/dependencies.rb:459:in `const_missing'
         from /Users/maym/Projects/loopnote/config/environment.rb:58
         from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems/
custom_require.rb:21:in `require'
         from ./script/../config/../vendor/rails/activesupport/lib/
active_support/dependencies.rb:490:in `require'
         from ./script/../config/../vendor/rails/activesupport/lib/
active_support/dependencies.rb:337:in `new_constants_in'
         from ./script/../config/../vendor/rails/activesupport/lib/
active_support/dependencies.rb:490:in `require'
         from /opt/local/lib/ruby/gems/1.8/gems/mongrel-0.3.17/lib/
mongrel/rails.rb:156:in `rails'
          ... 13 levels...
         from ./script/../config/../vendor/rails/activesupport/lib/
active_support/dependencies.rb:337:in `new_constants_in'
         from ./script/../config/../vendor/rails/activesupport/lib/
active_support/dependencies.rb:490:in `require'
         from ./script/../config/../vendor/rails/railties/lib/
commands/server.rb:39
         from script/server:3

Hope that helps,

Martin

Found the problem - because we weren't adding ALL plugin lib
directories as default_load_paths, they weren't getting added to
Dependencies.load_paths (which is where the automatic constant loading
magic is based).

I've updated the ticket (#6842) with a new patch that explicitly adds
plugin lib directories to the Dependencies mechanism - Koz, can you
apply #6842 and #6851 again?

Cheers!

I can confirm that the new patch seems to fix things for me.

Thanks,
Martin

Committed. Let me know if there are any other issues.