【问题标题】:Ruby on Rails/Rack Builder "Use" Method Wrong Number of ArgumentsRuby on Rails/Rack Builder“使用”方法错误的参数数量
【发布时间】:2013-04-21 23:20:20
【问题描述】:

我是 Ruby 和 Rails 的新手。我正在玩 Rack,试图对 Rails 拼图的这个部分有一个基本的了解,并跟随 Rob Conery 在他的 Tekpub/Rails 3 教程视频中。

不幸的是,视频中使用的 Rack 版本已经过时了,我认为在视频发布和现在之间发生了一些变化(就像 Ruby 1.8.x 和 1.9.x 之间的一些东西一样)。更不幸的是,我对 Ruby 或 Rack 的了解还不够,无法弄清楚我需要做哪些不同的事情。视频中使用的 Rack 版本是 1.1。我机器上的版本是1.4.5。

愚蠢的示例代码:

class EnvironmentOutput

  def intialize(app)
    @app = app
  end

  def call(env)
    out = ""

    unless(@app.nil?)
      response = @app.call(env)[1]
      out+=response
    end

    env.keys.each {|key| out+="<li>#{key}=#{env[key]}"}
    ["200", {"Content-Type" => "text/html"}, [out]]
  end

end


class MyApp
  def call(env)
    ["200", {"Content-Type" => "text/html"}, ["<h1>Hello There</h1>"]]    
  end
end

# My understanding is that this should work:
use EnvironmentOutput
run MyApp.new

当我运行它时,我得到以下信息:

ArgumentError: wrong number of arguments(1 for 0)

这是一系列错误中的第一个发生的地方(机架Builder 类中的第 82 行):

def use(middleware, *args, &block)
  if @map
    mapping, @map = @map, nil
    @use << proc { |app| generate_map app, mapping }
  end
  # error occurs HERE:
  @use << proc { |app| middleware.new(app, *args, &block) }
end

显然,我传递的东西不正确。可悲的是,我还不知道自己做错了什么。我已经在 Google 和 SO 上进行了搜索,但我怀疑我对 Ruby/Rails/Rack 关系的掌握还不够强,无法知道要问什么并获得合理有用的结果(或者,如果我是,然后我还不认识它)。

有人知道我在这里做错了什么吗?

更新:感谢选择的答案,我意识到这是一个错字。下一个问题是同一代码中的数组到字符串转换问题,但将作为新问题发布。

【问题讨论】:

  • 你能显示整个堆栈跟踪吗?
  • 我想过,但我想我会等到被问到,因为它很大,有人可能会立即注意到我的初级 Ruby 代码中的问题。这正是发生的事情! :-)

标签: ruby-on-rails ruby rack ruby-1.9.3


【解决方案1】:

这只是一个错字:

def intialize(app)

应该是

def initialize(app)

(您错过了i)。

由于您没有提供initialize 方法,Ruby 尝试使用默认的、无参数的方法,但由于 Rack 传递了一个参数(应用程序),您会得到 ArgumentError

【讨论】:

  • 好吧,我不觉得自己是个傻瓜!却又产生了新的问题。在out+=response 行,它给出了一个错误“无法将数组转换为字符串”。据我所知,变量 out 是一个字符串,响应变量设置为 MyApp.call(env) 返回的数组中的第三个元素。同样,我认为我缺少一些基本的东西。如果您认为最好,可以发布为新问题。 . .
  • 请允许我说我完全智障了,就像我从头开始一样。哪个,我想,我在某种程度上。 :-)
猜你喜欢
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 2015-03-21
  • 2021-12-07
  • 2020-07-25
  • 2016-02-17
  • 1970-01-01
相关资源
最近更新 更多