我试图执行下面的HelloWorld机架程序,并得到一个错误。感谢你的帮助。
ruby版本ruby 1.9.3p448 (2013-06-27) x86_64-cygwin
# helloworld.rb
require 'rack'
require 'rack/server'
class HelloWorld
def response
[200, {}, 'Hello World']
end
end
class HelloWorldApp
def self.call(env)
HelloWorld.new.response
end
end
Rack::Server.start :app => HelloWorldApp错误
[2013-11-26 11:23:03] ERROR NoMethodError: undefined method `each' for "Hello World":String
/usr/lib/ruby/gems/1.9.1/gems/rack-1.5.2/lib/rack/handler/webrick.rb:72:in `service'
/usr/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/usr/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/usr/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'发布于 2013-11-26 16:55:08
改变:
def response
[200, {}, 'Hello World']
end至:
def response
[200, {}, ['Hello World']]
end发布于 2013-11-26 16:56:48
数组中的第三项从#response返回(即。body)必须响应#each方法。数组,例如,#each。
来自机架规格
身体 主体必须对每个值作出响应,并且只能产生字符串值。主体本身不应该是字符串的实例,因为这将在Ruby1.9中中断。如果身体响应关闭,它将在迭代之后被调用。如果主体在操作后被中间件替换,则如果响应close,则必须首先关闭原始主体。如果主体响应于to_path,它必须返回一个字符串,标识其内容与调用每个文件所产生的内容相同的文件的位置;服务器可能将其用作传输响应的另一种更有效的方式。主体通常是String数组、应用程序实例本身或类似文件的对象。
https://stackoverflow.com/questions/20223133
复制相似问题