Listing 'rake routes' for a mountable Rails 3.1 engine

前端 未结 6 1793
悲&欢浪女
悲&欢浪女 2020-12-14 17:38

I\'m working on a mountable engine for use with Rails 3.1, and I want to list the engine\'s routes.

I created the engine using:

$ rails plugin new ra         


        
相关标签:
6条回答
  • 2020-12-14 18:14

    In rails 3.2X If you are in you "host_app" and have mounted a engine you could probably list the routes by executing (should work out of the box):

    bundle exec rake engine_name:routes
    
    0 讨论(0)
  • 2020-12-14 18:19

    If you copy code from the standard Rails 3.1.0 rake routes task into your Rakefile, and change the top part to read:

    task :routes => 'app:environment' do
      Rails.application.reload_routes!
      all_routes = RailsBlogEngine::Engine.routes.routes
    

    ...replacing RailsBlogEngine with the name of your engine, then you can get a rudimentary list of routes by running:

    rake routes
    

    Note that in Rails 3.1.1 and later, you'll need a newer version of the rake routes task.

    0 讨论(0)
  • 2020-12-14 18:24

    For rails 3

     desc 'Print out all defined routes inside engine  match order, with names. Target specific controller with CONTROLLER=x.'
      task engine_routes: :environment do
        Rails.application.reload_routes!
        app = ENV['ENGINE'] || "Rails.application"
        all_routes = app.constantize.routes.routes
        require 'rails/application/route_inspector'
        inspector = Rails::Application::RouteInspector.new
        puts inspector.format(all_routes, ENV['CONTROLLER']).join "\n"
      end
    

    Rails 4

     desc 'Print out all defined routes inside engine match order, with names. Target specific controller with CONTROLLER=x.'
    
      task engine_routes: :environment do
       app = ENV['ENGINE'] || "Rails.application"
       all_routes = app.constantize.routes.routes
       require 'action_dispatch/routing/inspector'
       inspector = ActionDispatch::Routing::RoutesInspector.new(all_routes)
       puts inspector.format(ActionDispatch::Routing::ConsoleFormatter.new, ENV['CONTROLLER'])
      end
    

    Then you can call like

     $rake engine_routes ENGINE="IssueTracker::Engine"
    
    0 讨论(0)
  • 2020-12-14 18:26

    In case people are missing it in the comments, as of Rails 3.2.2, you can now use

    $ rake app:routes
    
    0 讨论(0)
  • 2020-12-14 18:31

    For rails 3.x engine, rake routes does not work under engine's root (that's why it needs some hack by copying rake file). However rake routes works under test/dummy (or spec/dummy if using rspec). It will list all the pathes which belong to the engine in development and other engines mounted.

    0 讨论(0)
  • 2020-12-14 18:37

    in Rails 5, I could get the routes of the engine using the following command:

    bundle exec rake app:routes
    
    0 讨论(0)
提交回复
热议问题