我正在尝试执行以下HelloWorld机架程序并收到错误。感谢任何帮助。
ruby version 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
ERROR
[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'
答案 0 :(得分:12)
变化:
def response
[200, {}, 'Hello World']
end
为:
def response
[200, {}, ['Hello World']]
end
答案 1 :(得分:3)
从#response
返回的数组中的第3项(即body
)必须响应#each
方法。例如,数组respond to #each
。
身体
Body必须响应每个,并且必须只生成String值。该 正文本身不应该是String的实例,因为它会破坏 Ruby 1.9。如果身体响应关闭,它将被调用 迭代。如果在行动之后身体被中间件取代,那么 原始身体必须先关闭,如果它响应关闭。如果 正文响应to_path,它必须返回一个标识符的字符串 文件的位置,其内容与生成的文件的内容相同 叫每一个;这可以被服务器用作替代方案, 可能更有效的方式来传输响应。身体 通常是一个字符串数组,应用程序实例本身,或者 类似文件的对象。