NameError: неопределенная локальная переменная или метод `request' для main:Object

Я создаю приложение Sinatra, которое будет принимать IP-адрес посетителя и возвращать погоду в этом месте. Следуя doc Geocoder, может показаться, что получить IP так же просто, как

city = request.location.city

Однако ввод этого в irb просто дает ошибку NameError, которую вы видите в заголовке сообщения. Выполнение того, что мне кажется логичным, и попытка создать новый класс, в котором можно использовать метод request, приводит к еще одной ошибке NameError — на этот раз для хэша env, взятого Rack::Request.new(env).

Я могу понять, как построить это самостоятельно, но я застрял в этом конкретном вопросе и предполагаю, что упускаю из виду что-то, не упомянутое в документах. Что я делаю неправильно, из-за чего request и env остаются неопределенными, и как мне правильно определить их?


person calyxofheld    schedule 15.08.2016    source источник


Ответы (1)


Это так просто:

require "sinatra"
require "geocoder"

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

Ваша проблема в том, что вы пытаетесь запустить его в irb, где у вас нет контекста запроса, который создает и заполняет ваш объект запроса. Чтобы играть с ним, я бы рекомендовал просто запустить Sinatra. Или используйте что-то вроде racksh, tux, который дает вам что-то вроде irb, но со всем необходимым контекстом.

person Sir l33tname    schedule 21.08.2016