Forum: Ruby Bundler problem (difference between projects) [SOLVED]

4719e9e0162789b66f578a7e7f530b26?d=identicon&s=25 Honza Hejzl (welblaud)
on 2014-08-10 20:06
I am slowly learning Ruby as well as Sinatra. Now I would like to have
two different projects on my machine, both using Sinatra, the same
version of Ruby (2.1.2). I have installed Bundler and have separated
vendor/bundle folders inside projects' folders. I am using .rbenv with
ruby-build plugin.

In the first project I have three files, something like 1) server.rb, 2)
config.ru, 3) Gemfile. It includes basic things needed for running the
very basic project with Sinatra. Bundler worked well as well as
everything at all. It is possible to use "bundle exec rackup -p 'port'",
WEBrick is started, everything smooth. I have not tested another server
yet.

The problem is with the second project. There I have even more basic
setting. Later I wish I was able to run it via Thin server.

1) server.rb
#!/usr/bin/ruby
require 'sinatra'
get '/' do
  "Hello, world!"
end

2) gems included
rack-protection-1.5.3
rack-1.5.2
sinatra-1.4.5
tilt-1.4.1

Than it says:

ruby server.rb
/home/user/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in
`require': cannot load such file -- sinatra (LoadError)
  from
/home/user/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in
`require'
  from server.rb:3:in `<main>'

Of course I had used rbenv rehash for sure.

When I am trying to run the whole thing after properly installing Thin
via Bundler as bundle exec thin start, it says:

No adapter found for /home/user/git/sinatra-training found for
/home/honza/git/sinatra-training-oreilly

Bundler says everything is ok. I have no idea where could be the
problem...

Any help appreciated!
4719e9e0162789b66f578a7e7f530b26?d=identicon&s=25 Honza Hejzl (welblaud)
on 2014-08-11 09:01
Ok, for now really solved. It seems when using Bundler and Sinatra
together, it is needed to provide a config.ru file and initialize the
class:

config.ru file:
===============
$: << File.dirname(__FILE__)
require 'server.rb'

run Server.new

server.rb file:
===============
#!/usr/bin/ruby

require 'sinatra/base'

class Server < Sinatra::Base
  get '/' do
        "Hello, world!"
  end
end

Than it is possible to run that with bundle exec thin start... working
smoothly.

I have no idea if it is possible to run that without this, like it was
intended in my Sinatra book by O'Reilly (Sinatra Up and Running). There
they simply run ruby server.rb and it should work but I suppose just
because of the fact they don't use Bundler and rbenv there. I think my
problem was caused by another configuration.
7e1614e9431deef2bf123693dd6bb59d?d=identicon&s=25 Vlad M_ (vladm)
on 2014-08-13 10:32
Honza Hejzl wrote in post #1154854:
>......
>
> I have no idea if it is possible to run that without this, like it was
> intended in my Sinatra book by O'Reilly (Sinatra Up and Running). There
> they simply run ruby server.rb and it should work but I suppose just
> because of the fact they don't use Bundler and rbenv there. I think my
> problem was caused by another configuration.

Have you tried `bundle exec ruby server.rb` ?

You must not forget to put the line `Server.run!` at the end of
server.rb file.

If you make the `server.rb` file executable and add the hashbang entry
like `#!/usr/bin/env ruby`, you can start the server even by `bundle
exec ./server.rb` .
4719e9e0162789b66f578a7e7f530b26?d=identicon&s=25 Honza Hejzl (welblaud)
on 2014-08-13 11:04
Will try that in this way, thanks!
4719e9e0162789b66f578a7e7f530b26?d=identicon&s=25 Honza Hejzl (welblaud)
on 2014-08-13 11:15
It works! Cute, thank you!
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.