Sinatra和Haml:宝石更新后的奇怪行为

时间:2011-06-22 17:01:06

标签: sinatra haml

我使用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

我还没有找到解决问题的方法,是否有人知道如何解释它?

1 个答案:

答案 0 :(得分:2)

我和Sinatra 1.3.0.a(你正在使用的版本,我认为是发布候选版本而不是完整版本)有相同的错误,但更新到当前最新版本(1.3.0.e)修复它,降级到最新的稳定版本(1.2.6)。所以你的答案是升级或降级。

您可以使用以下方式加载特定版本的gem:

gem "sinatra", "=1.2.6"

在致电require "sinatra"之前,或者您可以考虑使用Bundler(使用相同的语法)。