【问题标题】:Sinatra fails to answer to a very basic GET requestSinatra 无法响应一个非常基本的 GET 请求
【发布时间】:2012-01-13 20:33:58
【问题描述】:

我有以下 Gemfile:

source "http://rubygems.org"

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

以及以下 Sinatra 应用程序:

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/ruby-1.9.2-p290@office-drop-sync/gems/rack-1.4.0/lib/rack/handler/webrick.rb:72:in `block in service'
/Users/mauricio/.rvm/gems/ruby-1.9.2-p290@office-drop-sync/gems/rack-1.4.0/lib/rack/handler/webrick.rb:71:in `each'
/Users/mauricio/.rvm/gems/ruby-1.9.2-p290@office-drop-sync/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。

【问题讨论】:

  • 可能是一个无用的评论,但您的代码很可靠,在 Ubuntu 10.10 上运行良好您是否通过 ruby app.rb 启动应用程序?
  • @Gazler 错误来自 webrick 处理程序。尝试添加set :server, 'webrick',您应该能够重现它。似乎其他处理程序(瘦?)在这里更宽容。

标签: ruby sinatra ruby-1.9


【解决方案1】:

您正在尝试从路由返回哈希,但哈希不是 something you can return here

只需使用.to_json 将散列转换为 json 字符串,然后您可以返回该字符串(您需要 json,但尚未使用它):

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

【讨论】:

  • 就是这样,谢谢,我遵循的教程没有提到 to_json 调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2021-04-29
  • 2023-04-06
相关资源
最近更新 更多