2010-10-24 9 views

Respuesta

17

Esto devolverá una lista de todas las aplicaciones de rack (incluyendo 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 funcionaba como un amuleto. Puse todo esto en un script 'test-rack.rb' y lo ejecuté a través de' ruby ​​test-rack.rb'. (la pregunta editada para agregar el bastidor faltante requiere;) –

-3

esto es desde hace mucho tiempo, sé

here's a nice thread, la respuesta definitiva es el último mensaje

actualiza por el comentario de Marc-Andre:

El siguiente es el último mensaje de este link

El rack no tiene un mecanismo para eso y dado que no todo el middleware se agrega a través de @middleware, Sinatra no puede decirle qué middleware se usa. Tampoco pueden los rieles, por cierto, puede decirte lo que es posible. Middleware no tiene que ser una lista lineal (es decir, cuando se utiliza un enrutador Rack o algo así).

+5

-1. El objetivo de SO no es tener que pasar por la lista de publicaciones. Copie y mejore la respuesta correcta y agregue ese enlace como fuente. –

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

De la descripción, está claro que sabe sobre 'middleware de rake'. Él quiere esto para una aplicación que no sea de Rails. –

Cuestiones relacionadas