Reputation: 2811
I have a simple sinatra app.
require 'rubygems'
require 'sinatra'
get '/' do
"Hello"
end
When I run it on Shotgun I get the following 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/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:114:ininner_app' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:102:in
assemble_app' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:86:inproceed_as_child' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:31:in
call!' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:18:incall' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/favicon.rb:12:in
call' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/rack-1.2.1/lib/rack/builder.rb:77:incall' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/rack-1.2.1/lib/rack/content_length.rb:13:in
call' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/rack-1.2.1/lib/rack/handler/webrick.rb:52:inservice' /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:inrun' /home/thedinga/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/server.rb:183:in
block in start_thread'
If i were to use ruby simple.rb
instead of shotgun, I get the output you'd expect in a browser. As a sidenote, if I push it to Heroku (which I would really like to run a sinatra app on), Heroku will fail to run the app as well. Is this a version issue with 1.9.2 ? or am I missing something else?
Upvotes: 5
Views: 5081
Reputation: 2562
I'm using Ruby 1.9.2 and Sinatra and I also have problems running it with Shotgun. There's a simple workaround: use sinatra-repeater
gem instead of Shotgun. Installation and setup is described in Sinatra Book: http://sinatra-book.gittr.com/#automatic_code_reloading
Upvotes: 0
Reputation: 133
A quick fix for this is discussed on the shotgun issues page on github.
$ shotgun -I. simple.rb
Upvotes: 2
Reputation: 303244
My config.ru
is typically much simpler:
root = ::File.dirname(__FILE__)
require ::File.join( root, 'app' )
# Assuming your application is subclassed from Sinatra::Application
run MyApp.new
The app.rb
file can (and should) require Sinatra (and rubygems if you're not on 1.9).
Upvotes: 1
Reputation: 181
the code above works, just correct require '#{path}/myapp' at config.ru file to require "#{path}/myapp" .
In ruby just strings with " caracter can use inner #{}. In string with ' caracter the string will be continue being '#{path}/myapp' and not 'value/of/path/variabel/myapp'.
So it can be done like the following
# 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
star the application just running the command shotgun at app root directory
Upvotes: 8
Reputation: 133577
Did you try decoupling the config from the app itself?
My template is something like
# 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 &
This with ruby1.9.2-p0..
Upvotes: 3