我使用Haml和Sinatra创建了一个网站。更新后(我猜它是在那之后)该网站不再工作;这是一个最小的例子:
/app.rb:
require 'rubygems' if RUBY_VERSION < '1.9'
require 'sinatra'
require 'haml'
get "/" do
haml :index
end
/views/layout.haml
!!!
%html{ :xmlns => "http://ww.w3.org/1999/xhtml", :lang => "en", "xml:lang" => "en" }
%head
%title test
%body
= yield
/view/index.haml
%p test
它引发了以下异常:
/usr/lib/ruby/gems/1.9.1/gems/tilt-1.3.2/lib/tilt/template.rb in initialize
raise ArgumentError, "file or block required" if (@file || block).nil?
/usr/lib/ruby/gems/1.9.1/gems/sinatra-1.3.0.a/lib/sinatra/base.rb in new
template.new(path, 1, options)
/usr/lib/ruby/gems/1.9.1/gems/sinatra-1.3.0.a/lib/sinatra/base.rb in block in compile_template
template.new(path, 1, options)
/usr/lib/ruby/gems/1.9.1/gems/tilt-1.3.2/lib/tilt.rb in fetch
@cache[key] ||= yield
/usr/lib/ruby/gems/1.9.1/gems/sinatra-1.3.0.a/lib/sinatra/base.rb in compile_template
template_cache.fetch engine, data, options do
/usr/lib/ruby/gems/1.9.1/gems/sinatra-1.3.0.a/lib/sinatra/base.rb in render
template = compile_template(engine, data, options, views)
/usr/lib/ruby/gems/1.9.1/gems/sinatra-1.3.0.a/lib/sinatra/base.rb in haml
render :haml, template, options, locals
我还没有找到解决问题的方法,是否有人知道如何解释它?
答案 0 :(得分:2)
我和Sinatra 1.3.0.a(你正在使用的版本,我认为是发布候选版本而不是完整版本)有相同的错误,但更新到当前最新版本(1.3.0.e)修复它,降级到最新的稳定版本(1.2.6)。所以你的答案是升级或降级。
您可以使用以下方式加载特定版本的gem:
gem "sinatra", "=1.2.6"
在致电require "sinatra"
之前,或者您可以考虑使用Bundler(使用相同的语法)。