2010-10-24 14 views

risposta

17

Questo restituirà un elenco di tutte le applicazioni a cremagliera (compresi middleware):

require 'rack' 

def middleware_classes(app)                                    
    r = [app] 

    while ((next_app = r.last.instance_variable_get(:@app)) != nil) 
    r << next_app 
    end 

    r.map{|e| e.instance_variable_defined?(:@app) ? e.class : e } 
end 

app = Rack::Builder.parse_file('config.ru').first 

p middleware_classes(app) 
+0

+1 ha funzionato come un incantesimo. Ho inserito tutto questo in uno script 'test-rack.rb' e l'ho eseguito tramite' ruby ​​test-rack.rb'. (la domanda modificata per aggiungere il rack mancante richiede;) –

-3

questo è attesa da tempo, lo so

here's a nice thread, la risposta definitiva è l'ultimo post

AGGIORNATO secondo il commento di Marc-Andre:

Il seguente è l'ultimo post di questo link

Rack non ha un meccanismo per questo e dal momento che non tutti i middleware sono aggiunti tramite @middleware, Sinatra non può dirti quale middleware è usato. Nessuno dei due può rotaie, btw, può solo dirti cosa è possibile. Il middleware non deve essere un elenco lineare (ad esempio quando si utilizza un router Rack o qualcosa del genere).

+5

-1. L'intero punto di SO non è quello di dover passare attraverso la lista dei messaggi. Copia e migliora la risposta giusta e aggiungi quel link come fonte. –

19
> rake middleware 

use ActionDispatch::Static 
use Rack::Lock 
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007ffd148f9468> 
use Rack::Runtime 
use Rack::MethodOverride 
use ActionDispatch::RequestId 
use Rails::Rack::Logger 
use ActionDispatch::ShowExceptions 
use ActionDispatch::DebugExceptions 
use ActionDispatch::RemoteIp 
use ActionDispatch::Reloader 
use ActionDispatch::Callbacks 
use ActiveRecord::Migration::CheckPending 
use ActiveRecord::ConnectionAdapters::ConnectionManagement 
use ActiveRecord::QueryCache 
use ActionDispatch::Cookies 
use ActionDispatch::Session::CookieStore 
use ActionDispatch::Flash 
use ActionDispatch::ParamsParser 
use Rack::Head 
use Rack::ConditionalGet 
use Rack::ETag 
run RackTest::Application.routes 

http://pothibo.com/2013/11/ruby-on-rails-inside-actiondispatch-and-rack/

+13

Dalla descrizione, è chiaro che sa di 'rake middleware'. Vuole questo per un'app non Rails. –

Problemi correlati