views:

377

answers:

5

Hello, I'm quite new to Ruby language (up to now I developed in Groovy + Grails) but since I was curious about it I wanted to try Sinatra on Ruby 1.9.2-p0.

I have a trivial website that is contained in /mywebpage and has 2 files:

# blog.rb
get '/' do
  'Hello World!'
end

get '/impossible' do
  haml :index
end

and

#config.ru
path = File.expand_path "../", __FILE__

$LOAD_PATH << (File.expand_path ".") + "/views"

require 'haml'
require 'sinatra'
require "#{path}/blog"

run Sinatra::Application

then in the same folder I have a /views/ folder that contains index.haml.

I try to run the server with rackup -p8080 but when I try to get /impossible I receive the following error:

Errno::ENOENT at /impossible
No such file or directory - /home/jack/mywebpage/<internal:lib/rubygems/views/index.haml

By searching over internet it seems that this maybe caused by "." not being included in $LOAD_PATH so I tried to add it or add directly views ./views so that actually $LOAD_PATH.inspect gives me correct path: ..., "/home/jack/mywebpage/views"]

But still it doesn't seem to work. Being quite new to the framework and the language I was wondering if I'm doing something wrong. any clues?

Thanks in advance

A: 

I ran into that last week and didn't find a suitable fix on the Sinatra site short of tweaking the sinatra code. I'm using rvm for my development and switched to try sinatra on Ruby 1.8.7 and it works fine again, so that's where I left it.

Oh, since you're new to Ruby, you might not know about rvm, so here's the lowdown. RVM is Mac only and highly recommended for managing your Ruby version and gems. It makes it trivial to have multiple Ruby versions and alternate groups of gems for development and testing. Everything is stored in your ~/.rvm directory so it's easy to blow it all away if you need to.

http://rvm.beginrescueend.com/

I just looked at the Sinatra site again about the problem to see if there was anything new, but it appears they consider the following to be an acceptable fix:

http://github.com/sinatra/sinatra/issues/#issue/50

I'm a bit adverse to having to edit the source of Sinatra as recommended by issue #50, but it's not real hard to do. I'd like to see them put out an update so we'd have an official fix but I haven't seen anything yet:

gem env will tell you the "GEM PATHS". Sinatra's gem will be in one of those. The line mentioned in issue #50 goes into base.rb. On my machine it's something like ...gems/ruby-1.9.2-p0/gems/sinatra-1.0/lib/sinatra/base.rb.

Insert:

    /<internal:/, # ruby 1.9.2-p0 hacks
at line 1020.

Save the file and you should be good to go.

Greg
RVM is Mac only? That's new to me... It should work on Linux, and probably any other system with GCC build environment and bash. This includes systems like FreeBSD, OpenBSD, Solaris, and even Windows with Cygwin. It should work at least, but not supported on systems other than Linux and OS X, and it's certainly not Mac only. Oh, and there's similar software for Windows called Pik.
AboutRuby
That's a mistake on my part. I was remembering it wasn't available on Windows, but forgot I have it running on my Linux boxes.
Greg
+1  A: 

I ran into a similar problem, and solved it like this. I didn't dig into the problem, but this is what I found and it works. It'll supposedly be fixed in the next version of Sinatra (which they should really get out the door, just to fix these few 1.9.2 bugs).

#!/usr/bin/env ruby
require 'rubygems'
require 'sinatra'

enable :run

get '/' do
  "Hello, world!"
end

Edit: It seems there are multiple bugs with Sinatra on 1.9.2. This one will fix Sinatra apps not starting on 1.9.2. I don't use a views directory (I like to keep my apps single-file), so I didn't run into your particular problem. This fix most likely won't help you at all. I probably should have read your problem more closely..

AboutRuby
+1  A: 

This, and other issues with 1.9, will be solved in Sinatra 1.1. You could use this fork: http://github.com/rkh/sinatra/tree/1.1

Konstantin Haase
+2  A: 

Running Sinatra with Ruby 1.9.2 the template directory is no longer implicitly 'views', you need to set it yourself.

set :views, File.dirname(FILE) + "/views"

I hope it helps you Regards!

rengo.Java
+1  A: 
gem install sinatra --pre
Konstantin Haase