2010-10-24 7 views

Répondre

17

Cela renvoie une liste de toutes les applications en rack (y compris 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 a travaillé comme un charme. J'ai mis tout cela dans un script 'test-rack.rb' et l'ai exécuté via' ruby ​​test-rack.rb'. (question éditée pour ajouter le support absent manquant;) –

-3

c'est attendue depuis longtemps, je sais

here's a nice thread, la réponse définitive est le dernier message

MISE À JOUR selon le commentaire de Marc-André:

Voici le dernier message de ce link

Rack n'a pas de mécanisme pour cela et puisque tous les middleware ne sont pas ajoutés via @middleware, Sinatra ne peut pas vous dire quel middleware est utilisé. Ni les rails, btw, il peut juste vous dire ce qui est possible. L'intergiciel ne doit pas être une liste linéaire (c'est-à-dire lorsqu'il utilise un routeur Rack ou quelque chose).

+5

-1. Le but de SO n'est pas d'avoir à passer par la liste des messages. Copiez et améliorez la bonne réponse et ajoutez ce lien en tant que source. –

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 description, il est clair qu'il sait au sujet de 'rake middleware'. Il veut cela pour une application non-Rails. –

Questions connexes