7

According to Rails engines extending functionality in Rails 2.x one could do

Rails::Initializer.new(Rails.configuration).plugin_loader.engines

This code is not working in Rails 3

ActionController::RoutingError (undefined method `new' for Rails::Initializer:Module):
  config/application.rb:12:in `require_or_load'

What do I need to do in Rails 3 to get such list of engines?

This is needed for Extending controllers of a Rails 3 Engine in the main app

Community
  • 1
  • 1
Andrei
  • 10,918
  • 12
  • 76
  • 110

3 Answers3

17

This has changed with Rails 4.1. The accepted answer is deprecated and the new way to get the installed Engines for a Rails application is now:

::Rails::Engine.subclasses.map(&:instance)

Here's a reference to the commit in github making the change (and also showing how it was implemented after initial deprecation...)

If you need to use the previous solution from Rails 4.1:

module Rails
    class Engine
        class Railties
            def self.engines
                @engines ||= Rails::Engine.subclasses.map(&:instance)
            end
        end
    end
end
Darren Hicks
  • 4,946
  • 1
  • 32
  • 35
  • Yes - the question was for a Rails 3 app, but it is still misleading to stumble upon this answer without the latest and greatest having a presence. – Darren Hicks May 16 '14 at 18:42
13

As of 5/10/2011 and Rails 3.1 beta, it's now

Rails::Application::Railties.engines
Jeremy Raines
  • 1,741
  • 3
  • 14
  • 22
2

Try:

Rails::Application.railties.engines
Adrian Pacala
  • 1,011
  • 1
  • 8
  • 12