首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HelloWorld Rack程序: NoMethodError:未定义的方法“Rack”

HelloWorld Rack程序: NoMethodError:未定义的方法“Rack”
EN

Stack Overflow用户
提问于 2013-11-26 16:52:44
回答 2查看 2.3K关注 0票数 0

我试图执行下面的HelloWorld机架程序,并得到一个错误。感谢你的帮助。

ruby版本ruby 1.9.3p448 (2013-06-27) x86_64-cygwin

代码语言:javascript
复制
# 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

错误

代码语言:javascript
复制
[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'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-26 16:55:08

改变:

代码语言:javascript
复制
def response
  [200, {}, 'Hello World']
end

至:

代码语言:javascript
复制
def response
  [200, {}, ['Hello World']]
end
票数 12
EN

Stack Overflow用户

发布于 2013-11-26 16:56:48

数组中的第三项从#response返回(即。body)必须响应#each方法。数组,例如,#each

来自机架规格

身体 主体必须对每个值作出响应,并且只能产生字符串值。主体本身不应该是字符串的实例,因为这将在Ruby1.9中中断。如果身体响应关闭,它将在迭代之后被调用。如果主体在操作后被中间件替换,则如果响应close,则必须首先关闭原始主体。如果主体响应于to_path,它必须返回一个字符串,标识其内容与调用每个文件所产生的内容相同的文件的位置;服务器可能将其用作传输响应的另一种更有效的方式。主体通常是String数组、应用程序实例本身或类似文件的对象。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20223133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档