Sinatra找不到Ruby 1.9.2-p0的观点

Jac*_*ack 5 ruby haml path sinatra

我是Ruby语言的新手(到目前为止我是用Groovy + Grails开发的)但是因为我很好奇它,我想在Ruby 1.9.2-p0上尝试Sinatra.

我有一个简单的网站,其中包含/mywebpage2个文件:

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

get '/impossible' do
  haml :index
end
Run Code Online (Sandbox Code Playgroud)

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

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

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

run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

然后在同一个文件夹中我有一个/views/包含的文件夹index.haml.

我尝试运行服务器,rackup -p8080但当我尝试得到/impossible以下错误时:

Errno::ENOENT at /impossible
No such file or directory - /home/jack/mywebpage/<internal:lib/rubygems/views/index.haml
Run Code Online (Sandbox Code Playgroud)

通过互联网搜索,似乎这可能是由"."引起的.没有被包括在内$LOAD_PATH所以我试图添加它或直接添加视图,./views以便实际上$LOAD_PATH.inspect给我正确的路径:..., "/home/jack/mywebpage/views"]

但它仍然似乎没有用.作为框架和语言的新手,我想知道我是否做错了什么.任何线索?

小智 12

使用Ruby 1.9.2运行Sinatra模板目录不再是隐式"视图",您需要自己设置它.

set :views, File.dirname(__FILE__) + "/views"
Run Code Online (Sandbox Code Playgroud)

注意,目前Ruby也有Kernel#__dir__()相当于的方法File.dirname(__FILE__).