rackup converts the supplied rack config file to an instance of Rack::Builder. This is how is happens under the hood ( just so you get an idea ) :
config_file = File.read(config)
rack_application = eval("Rack::Builder.new { #{config_file} }")
And then rackup supplies rack_application to the respective webserver :
server.run rack_application, options
Very straight forward! In short, rack config files are evaluated within the context of a Rack::Builder object. So if we convert infinity to a rack config file which rackup can understand :
infinity = Proc.new {|env| [200, {"Content-Type" => "text/html"}, env.inspect]}
use Rack::CommonLogger
map '/' do
run infinity
end
map '/version' do
map '/' do
run Proc.new {|env| [200, {"Content-Type" => "text/html"}, "infinity 0.1"] }
end
map '/last' do
run Proc.new {|env| [200, {"Content-Type" => "text/html"}, "infinity beta 0.0"] }
end
end
And now run it :
rackup infinity.ru