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?
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
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..
A quick fix for this is discussed on the shotgun issues page on github.
$ shotgun -I. simple.rb
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With