20

Pracuję nad montowalnym silnikiem do użytku z Rails 3.1 i chcę wyświetlić trasy silnika.Listing "tras rake" dla montowanego silnika Rails 3.1

I stworzył silnik przy:

$ rails plugin new rails_blog_engine --mountable 

i edytować plik 'test/atrapę/config/Trasy' czytać:

Rails.application.routes.draw do 
    mount RailsBlogEngine::Engine => "/blog" 
end 

... i 'config/tras' na przeczytaj:

RailsBlogEngine::Engine.routes.draw do 
    resources :posts 
end 

Chcę wyświetlić trasy wygenerowane dla ": postów", ale nie jest jasne, w jaki sposób mogę to zrobić. Kiedy uruchamiam „grabie aplikacji: szlaki”, mam tylko „/ blogu” trasą:

$ rake app:routes 
rails_blog_engine /blog {:to=>RailsBlogEngine::Engine} 

gdy uruchamiam „trasy natarcia”, pojawia się błąd:

$ rake routes 
rake aborted! 
Don't know how to build task 'routes' 

Jak mogę zobacz trasy dla ": postów"? Czy mogę to zrobić bez przepisywania odpowiednich zadań rake?

+6

Teraz w Rails 3.2.2, 'aplikacji natarcia: routes' działa dobrze.Proste "trasy rake'u" rzucają ten sam błąd, ale jest to oczekiwane. – Zabba

+0

Napisałem dzisiaj silnik, natknąłem się na ten problem i zauważyłem, że miałem ten sam problem 3 lata temu! (podaj mój komentarz powyżej) Niektóre rzeczy nigdy się nie zmieniają, co? :) – Zabba

Odpowiedz

11

Jeśli skopiujesz kod od standardowych Rails 3.1.0 rake routes zadanie do swojej Rakefile i zmienić górną część w brzmieniu:

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

... zastępując RailsBlogEngine z nazwą swojego silnika, a następnie mogą uzyskać podstawową listę tras, uruchamiając:

rake routes 

Należy zauważyć, że w Rails 3.1.1 i późniejszych, musisz się newer version of the rake routes zadanie.

+1

Dzięki! Pracował dla mnie. Wydaje się dziwne, że nie będzie to po wyjęciu z pudełka. –

20

W przypadku ludzi brakuje go w komentarzach, jak z Rails 3.2.2 można teraz używać

$ rake app:routes 
3

dla szyn silnika 3.x rake routes nie działa pod korzeń silnika (dlatego, że potrzebuje trochę siekać przez skopiowanie pliku rake). Jednak rake routes działa w teście/manekinie (lub spec/dummy przy użyciu rspec). Zostaną wyszczególnione wszystkie piany należące do silnika w fazie rozwoju i zamontowane inne silniki.

1

Na szynach 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 

Szyny 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 

Następnie można nazwać jak

$rake engine_routes ENGINE="IssueTracker::Engine" 
+0

Dzięki ... udało mi się dowiedzieć, jak uzyskać dostęp do adresu url_helpers z silnika, na przykład '" IssueTracker :: Engine ".constantize.routes.url_helpers' z którym mogłem dynamicznie" wysłać "do pomocnika ścieżki, którego potrzebowałem. – erroric

-1

w szynach 3.2x Jeśli jesteś w Tobie "host_app" i mieć zamontowałeś silnik, który prawdopodobnie mógłbyś wymienić na liście tras wykonując (powinien pracować po wyjęciu z pudełka):

bundle exec rake engine_name:routes 
1

w Rails 5, mogę dostać trasy silnika za pomocą następującego polecenia:

bundle exec rake app:routes