【问题标题】:HelloWorld Rack Program : NoMethodError: undefined method `each'HelloWorld 机架程序:NoMethodError:未定义的方法“每个”
【发布时间】:2013-11-26 16:52:44
【问题描述】:

我正在尝试在 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'

【问题讨论】:

    标签: ruby rack


    【解决方案1】:

    改变:

    def response
      [200, {}, 'Hello World']
    end
    

    到:

    def response
      [200, {}, ['Hello World']]
    end
    

    【讨论】:

      【解决方案2】:

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

      来自Rack specification

      身体

      Body 必须响应每一个并且只能产生 String 值。这 Body 本身不应该是 String 的实例,因为这会中断 红宝石 1.9。如果 Body 响应关闭,它将在之后调用 迭代。如果主体在动作后被中间件替换,则 如果响应关闭,则必须先关闭原始主体。如果 Body 响应 to_path,它必须返回一个 String 标识 文件的位置,其内容与生成的内容相同 打电话给每个人;这可以被服务器用作替代方案, 可能更有效的方式来传输响应。身体 通常是字符串数组、应用程序实例本身或 类文件对象。

      【讨论】:

      • 感谢您的参考。
      猜你喜欢
      • 2015-10-05
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 2013-04-24
      • 2015-05-19
      • 1970-01-01
      相关资源
      最近更新 更多