2016-08-15 5 views
0

나는 방문자의 IP 주소를 가져 와서 해당 위치의 날씨를 반환하는 Sinatra 앱을 구축 중입니다. 지오 코더 doc에 따라, 그것은 IRB에 그 입력 간단 NameError : 정의되지 않은 로컬 변수 또는 메소드`request 'for main : Object

city = request.location.city 

으로 IP를 얻는 것은 것으로 보인다, 그러나 당신이 게시물 제목에서 볼 수있는 나가서 설명하자면 NameError을 제공합니다. 나에게 논리적 인 루트가되어서 request 메서드를 사용하는 새로운 클래스를 만들려고하면 에 의해 취해진 env 해시의 다른 NameError가 발생합니다.

내 자신 만의 방법을 생각해 낼 수는 있지만,이 특정 지점을 잘 모르겠다. 문서에서 언급되지 않은 것을 간과하고 있다고 가정한다. requestenv이 정의되지 않은 상태로 남겨 두는 것은 무엇이고, 올바르게 정의하려면 어떻게해야합니까?

답변

1

그것은 그렇게 간단하다 :

require "sinatra" 
require "geocoder" 

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

귀하의 문제는 당신이 작성하고 귀하의 요청 객체를 채 웁니다 요청의 컨텍스트를하지 않은 경우 irb에서 그것을 실행하려고 할 것입니다. 그것을 가지고 노는 것은 sinatra를 실행하는 것이 좋습니다. 또는 racksh, tux과 같은 것을 사용하면 irb와 비슷하지만 필요한 모든 컨텍스트가 제공됩니다.