Sinatra no lo sabe, incluso cuando la ruta predeterminada se implementa con estilo modular

Estoy ejecutando MacOS Mavericks conjruby y estoy tratando de escribir un básicomodular sinatra aplicación Esto es lo que miconfig.ru parece

require 'app/app'   
run Sinatra::Application

Lo invoco así conrackup, puedes ver el404 errores

rackup -s puma -p 8080
Puma 2.10.2 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:8080
127.0.0.1 - - [17/Jan/2015:18:32:37 -0500] "GET / HTTP/1.1" 404 437 0.0290
127.0.0.1 - - [17/Jan/2015:18:32:37 -0500] "GET / HTTP/1.1" 404 437 0.0980
127.0.0.1 - - [17/Jan/2015:18:32:37 -0500] "GET /__sinatra__/404.png HTTP/1.1" 304 - 0.0120
127.0.0.1 - - [17/Jan/2015:18:32:37 -0500] "GET /__sinatra__/404.png HTTP/1.1" 304 - 0.0170

y esto es lo que misource parece -

➜ less app/app.rb
require 'sinatra/base'

class App < Sinatra::Base

  get '/' do
    "Hello World"
  end
end

Si cambio la fuente a la manera clásica

➜ cat app/app.rb
require 'sinatra'

#class App < Sinatra::Base

  get '/' do
    "Hello World"
  end
#end

y luego invocarlo así, funciona bien

➜ ruby app/app.rb
Puma 2.10.2 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:4567
== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from Puma
127.0.0.1 - - [17/Jan/2015:18:36:20 -0500] "GET / HTTP/1.1" 200 11 0.0250

Creo que me estoy perdiendo alguna configuración muy obvia, pero parece que puedo entender qué es eso, ¿alguien puede decirme lo que me estoy perdiendo? Puedo compartir más detalles sobre el medio ambiente si es necesario.

Respuestas a la pregunta(1)

Su respuesta a la pregunta