Я новичок в Ruby and Rails. Я играю с Rack, пытаясь понять базовую концепцию головоломки Rails, следуя вместе с Робом Конери в его учебнике Tekpub/Rails 3 vid.Ruby on Rails/Rack Builder «Use» Method Wrong Number of Arguments
К сожалению, версия Rack, используемая в VID, стала длинной в зубе, и я думаю, что что-то изменилось между видео-релизом и теперь (как и некоторые вещи в 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)
Это где первая в серии ошибок происходит (строка 82 в стойка Builder
класс):
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
O я, очевидно, что-то неправильно передаю. К сожалению, я еще недостаточно знаю, чтобы понять, что я делаю неправильно. Я искал в Google и здесь, на SO, но я подозреваю, что у меня также недостаточно сильное понимание отношений Ruby/Rails/Rack, чтобы узнать, что спросить и получить разумно полезный результат (или, если я ЕСМЬ, то я этого еще не узнаю).
Кто-нибудь знает, что я делаю неправильно здесь?
UPDATE: Благодаря выбранному ответу, я понимаю, что это была опечатка. Следующая проблема - проблема преобразования массива в строку в том же коде, но будет опубликован как новый вопрос.
Не могли бы вы показать всю трассировку стека? – rossta
Я, хотя об этом, но подумал, что буду ждать, пока его спросят, как он был большой, и кто-то, возможно, сразу заметил проблему в моем рубиновом коде младшей лиги. Именно это и произошло! :-) – XIVSolutions