La fonctionnalité que je recherche est similaire à la commande rake middleware
dans Rails, à l'exception d'une application de rack générique.Obtenir la liste ordonnée de middleware dans une application de baie générique?
Répondre
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)
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).
-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. –
> 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/
De la description, il est clair qu'il sait au sujet de 'rake middleware'. Il veut cela pour une application non-Rails. –
+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;) –