Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[3.1.0.rc1] App plugins initialized before engines and plugins inside engines It seems that plugins inside a Rails 3.1 application proper (i.e. in /vendor/plugins) are initialized before engines and plugins inside engines. After some debugging, I found the culprit in Rails::Application::Railties#all: def all(&block) @ALL ||= railties + engines + super @all.each(&block) if block @ALL end The call to super here implicitly passes the &block argument, which has the unfortunate side-effect of adding the plugin initializers first (in front of other railties and engines) in the case of Rails::Engine#initializers: def initializers initializers = [] railties.all { |r| initializers += r.initializers } initializers += super initializers end One solution that works here is to change how super is called, e.g. this works: def all(&block) @railties_plus_engines ||= railties + engines @railties_plus_engines.each(&block) if block @railties_plus_engines + super end (Here I'm deliberately not memoizing the result so that super is always called, and that the block is run against the plugins after it has been run against the railties and engines first.)
- Loading branch information