2016-08-15 2 views
0

Ich baue eine Sinatra-App, die die IP-Adresse eines Besuchers annimmt und das Wetter dieses Ortes zurückgibt. Nach dem Geocoder doc, so scheint es, dass der IP bekommen ist so einfach wieNameError: undefinierte lokale Variable oder Methode `request 'für main: Objekt

city = request.location.city 

dass Eintreten in irb, gibt jedoch nur das Nameerror Sie in dem Post-Titel zu sehen. Gehen, was scheint mir der logische Weg und versucht, eine neue Klasse zu erstellen, auf der die request Methode verwendet wird, führt zu einem anderen NameError - diesmal für die env Hash von Rack::Request.new(env) genommen.

Ich kann herausfinden, wie man das Ding auf eigene Faust baut, aber ich bin über diesen speziellen Punkt ratlos, und nehme an, dass ich etwas übersehe, was in den Dokumenten nicht erwähnt wird. Was mache ich falsch, was dazu führt, dass request und env nicht definiert sind, und wie gehe ich vor, um sie richtig zu definieren?

Antwort

1

Es ist so einfach wie das:

require "sinatra" 
require "geocoder" 

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

Ihr Problem ist, dass Sie es in irb zu laufen versuchen, wo man nicht den Kontext einer Anfrage haben, die erstellt und füllt Ihre Anfrage Objekt. Um damit zu spielen, würde ich empfehlen, Sinatra zu spielen. Oder verwenden Sie etwas wie racksh, tux, die Ihnen etwas wie irb, aber mit all den Kontext benötigt.

Verwandte Themen