2012-01-13 58 views
1

我有以下的Gemfile:西纳特拉没有回答一个非常基本的GET请求

source "http://rubygems.org" 

gem 'sinatra', '1.3.2' 
gem 'json', '1.6.4' 

而下面西纳特拉应用:

require 'sinatra' 
require 'json' 

get '/ze/api/session.json' do 
    content_type :json 
    { :name => 'name' } 
end 

当我作出这样一个基本要求:

curl localhost:4567/ze/api/session.json 

我得到这个:

[2012-01-13 17:30:36] ERROR TypeError: can't convert Array into String 
/Users/mauricio/.rvm/gems/[email protected]/gems/rack-1.4.0/lib/rack/handler/webrick.rb:72:in `block in service' 
/Users/mauricio/.rvm/gems/[email protected]/gems/rack-1.4.0/lib/rack/handler/webrick.rb:71:in `each' 
/Users/mauricio/.rvm/gems/[email protected]/gems/rack-1.4.0/lib/rack/handler/webrick.rb:71:in `service' 
/Users/mauricio/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service' 
/Users/mauricio/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run' 
/Users/mauricio/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread' 
localhost - - [13/Jan/2012:17:30:36 BRT] "GET /ze/api/session.json HTTP/1.1" 500 311 

我在Lion Mac中使用Ruby 1.9.2和RVM。

+0

也许是无益的评论,但你的代码是坚实的,在Ubuntu 10.10上可以正常工作。你是通过做'ruby app.rb'来启动应用吗? – Gazler 2012-01-13 20:36:41

+0

@Gazler错误来自webrick处理程序。尝试添加'set:server',webrick'',你应该能够重现它。看来其他处理程序(瘦?)在这里更宽容。 – matt 2012-01-13 21:17:08

回答

4

您试图从路线返回散列,但散列不是something you can return here

只需使用.to_json把散列成JSON字符串,然后您可以返回(你需要JSON,但不使用它尚未):

get '/ze/api/session.json' do 
    content_type :json 
    { :name => 'name' }.to_json 
end 
+0

就是这样,谢谢,我跟着的教程没有提到to_json调用。 – 2012-01-13 23:32:39