2012-01-13 4 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 

Я использую Ruby 1.9.2 с RVM в Lion Mac.

+0

Возможно, бесполезен комментарий, но ваш код работает отлично, отлично работает здесь, на Ubuntu 10.10. Вы запускаете приложение, выполнив «ruby app.rb»? – Gazler

+0

@ Gazler ошибка исходит от обработчика webrick. Попробуйте добавить 'set: server, 'webrick'', и вы сможете воспроизвести его. Похоже, что другие обработчики (тонкие?) Здесь более прощающие. – matt

ответ

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. –