diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb index f22e34c7dc1fa..637fe7431394f 100644 --- a/railties/lib/initializer.rb +++ b/railties/lib/initializer.rb @@ -536,9 +536,7 @@ def initialize_i18n end def initialize_metal - Dir["#{configuration.root_path}/app/metal/*.rb"].each do |file| - configuration.middleware.use(File.basename(file, '.rb').camelize) - end + configuration.middleware.use Rails::Rack::Metal end # Initializes framework-specific settings for each of the loaded frameworks diff --git a/railties/lib/rails/rack/metal.rb b/railties/lib/rails/rack/metal.rb index 8dfbedad90cf6..77d00ab09175b 100644 --- a/railties/lib/rails/rack/metal.rb +++ b/railties/lib/rails/rack/metal.rb @@ -1,21 +1,17 @@ module Rails module Rack class Metal + def self.new(app) + apps = Dir["#{Rails.root}/app/metal/*.rb"].map do |file| + File.basename(file, '.rb').camelize.constantize + end + apps << app + ::Rack::Cascade.new(apps) + end + NotFound = lambda { |env| [404, {"Content-Type" => "text/html"}, "Not Found"] } - - def self.call(env) - new(NotFound).call(env) - end - - def initialize(app) - @app = app - end - - def call(env) - @app.call(env) - end end end end diff --git a/railties/lib/rails_generator/generators/components/metal/templates/metal.rb b/railties/lib/rails_generator/generators/components/metal/templates/metal.rb index 39487263dfd16..e94982b69ac0d 100644 --- a/railties/lib/rails_generator/generators/components/metal/templates/metal.rb +++ b/railties/lib/rails_generator/generators/components/metal/templates/metal.rb @@ -1,12 +1,12 @@ # Allow the metal piece to run in isolation require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails) -class <%= class_name %> < Rails::Rack::Metal - def call(env) +class <%= class_name %> + def self.call(env) if env["PATH_INFO"] =~ /^\/<%= file_name %>/ - [200, {"Content-Type" => "text/html"}, "Hello, World!"] + [200, {"Content-Type" => "text/html"}, ["Hello, World!"]] else - super + [404, {"Content-Type" => "text/html"}, ["Not Found"]] end end end