2010-12-03 16 views
5

Tengo una aplicación simple de sinatra.Problemas con Sinatra y Ruby 1.9.2 en Shotgun

require 'rubygems' 
require 'sinatra' 

get '/' do 
    "Hello" 
end 

Cuando corro en la escopeta me sale el siguiente error:

Boot Error

Something went wrong while loading simple.rb

LoadError: no such file to load -- simple.rb

:29:in require' <internal:lib/rubygems/custom_require>:29:in require' /home/thedinga/.rvm/gems/[email protected]/gems/shotgun-0.8/lib/shotgun/loader.rb:114:in inner_app' /home/thedinga/.rvm/gems/[email protected]/gems/shotgun-0.8/lib/shotgun/loader.rb:102:in assemble_app' /home/thedinga/.rvm/gems/[email protected]/gems/shotgun-0.8/lib/shotgun/loader.rb:86:in proceed_as_child' /home/thedinga/.rvm/gems/[email protected]/gems/shotgun-0.8/lib/shotgun/loader.rb:31:in call!' /home/thedinga/.rvm/gems/[email protected]/gems/shotgun-0.8/lib/shotgun/loader.rb:18:in call' /home/thedinga/.rvm/gems/[email protected]/gems/shotgun-0.8/lib/shotgun/favicon.rb:12:in call' /home/thedinga/.rvm/gems/[email protected]/gems/rack-1.2.1/lib/rack/builder.rb:77:in call' /home/thedinga/.rvm/gems/[email protected]/gems/rack-1.2.1/lib/rack/content_length.rb:13:in call' /home/thedinga/.rvm/gems/[email protected]/gems/rack-1.2.1/lib/rack/handler/webrick.rb:52:in service' /home/thedinga/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:111:in service' /home/thedinga/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:70:in run' /home/thedinga/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/server.rb:183:in block in start_thread'

Si volviera a utilizar ruby simple.rb en lugar de escopeta, consigo la salida era de esperar en un navegador. Como nota al margen, si presiono a Heroku (que me gustaría ejecutar una aplicación de sinatra), Heroku tampoco podrá ejecutar la aplicación. ¿Es este un problema de versión con 1.9.2? o me estoy perdiendo algo más?

Respuesta

8

el código anterior funciona, simplemente correcta requieren '# {ruta}/miaplicacion' en el archivo de config.ru para requerir "# {path}/myapp".

En ruby ​​solo cadenas con "caracter puede usar inner # {}. En string con 'caracter la cadena continuará siendo' # {path}/myapp 'y no' value/of/path/variabel/myapp ' .

por lo tanto, se puede hacer como el siguiente

# FILE config.ru 

path = File.expand_path "../", __FILE__ 

require 'rubygems' 
require 'sinatra' 
require "#{path}/myapp" 

run Sinatra::Application 


# FILE myapp.rb 

get '/' do 
    'hello' 
end 

estrella de la aplicación simplemente correr la escopeta comando en el directorio raíz aplicación

+0

wow gracias por la sugerencia, soy un chico .Net así que no voy a ver cosas así. –

+0

+200 puntos gracias – cbmeeks

3

¿Intentó desacoplar la configuración de la aplicación?

Mi plantilla es algo así como

# FILE config.ru 

path = File.expand_path "../", __FILE__ 

require 'rubygems' 
require 'sinatra' 
require '#{path}/myapp' 

run Sinatra::Application 


# FILE myapp.rb 

get '/' do 
    'hello' 
end 

# FILE start.sh 

shotgun -o 0.0.0.0 -p 8888 & 

Este con ruby1.9.2-P0 ..

+0

Ok, así que lo probé sin éxito. Soy bastante nuevo para Ruby en general, así que tengo un par de preguntas. 1. ¿Debería la configuración ser config.ru? 2. No estoy familiarizado con lo que está sucediendo en el archivo start.sh. ¿Reemplaza eso el comando 'shotgun config.rb'? –

+0

¿qué problema estás recibiendo? – Jack

+0

El navegador arroja el mismo error: LoadError: no se carga ese archivo - config.rb –

1

Mi config.ru es típicamente mucho más simple:

root = ::File.dirname(__FILE__) 
require ::File.join(root, 'app') 

# Assuming your application is subclassed from Sinatra::Application 
run MyApp.new 

El archivo app.rb puede (y debe) requerir Sinatra (y rubygems si no está en 1.9).

+0

Esto funciona para mí en 1.8.7 y 1.9.2. Esta es la respuesta más versátil aquí. – Georges

0

estoy usando Rubí 1.9.2 y Sinatra y que también tienen problemas para ejecutar con la escopeta. Hay una solución simple: use la gema sinatra-repeater en lugar de Shotgun. La instalación y la configuración se describen en el libro de Sinatra: http://sinatra-book.gittr.com/#automatic_code_reloading

Cuestiones relacionadas