【发布时间】: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