NameError: undefined local variable or method `request' for main:Object

NameError: undefined local variable or method `request' for main:Object

我正在构建一个 Sinatra 应用程序,它将获取访问者的 IP 地址和 return 该位置的天气。跟着Geocoderdoc,貌似获取IP就这么简单

city = request.location.city

然而,将其输入到 irb 中,只会给出您在 post 标题中看到的 NameError。走在我看来合乎逻辑的路线并尝试创建一个新的 class 在其上使用 request 方法会导致另一个 NameError - 这次是 env 散列由 Rack::Request.new(env).

我可以弄清楚如何自己构建这个东西,但我对这一点感到困惑,并假设我忽略了文档中未提及的内容。我做错了什么导致 requestenv 保持未定义状态,我该如何正确定义它们?

就这么简单:

require "sinatra"
require "geocoder"

get "/" do
    p request.location.city
    "works"
end

您的问题是您试图在 irb 中 运行 它,而您没有创建和填充请求对象的请求的上下文。要玩它,我会推荐 运行 sinatra。或者使用像 racksh, tux 这样的东西,它给你一个像 irb 但需要所有上下文的东西。