2016-11-15 11 views
0

내 모델 에서처럼 좌표를 입력 할 때 주소를 얻으려고합니다.오류 : Google 지오 코딩 호출 중 오류가 발생했습니다 : SSL_connect SYSCALL returned = 5 errno = 0 state = SSLv2/v3 read server hello A

def full_address 
    Geocoder.address("#{self.latlon.x}, #{self.latlon.y}") 
    end 

그러나 때로는 완벽하게 작동하고 때로는이 오류가 발생합니다. 나는 해결책을 찾았지만 어느 것도 나에게 해당되지 않는다.

warning: constant Geokit::Geocoders::Geocoder::TimeoutError is deprecated 
E, [2016-11-15T17:06:32.828481 #7406] ERROR -- : Caught an error during Google geocoding call: SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A 
E, [2016-11-15T17:06:32.828665 #7406] ERROR -- : /Users/Brandon/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/net/http.rb:933:in `connect_nonblock' 

답변

0

나는 아무 것도 게시하지 않았습니다. 아무도 게시하지 않았습니다. 특정 오류 메시지에 SSL 경고가 포함되어 있으므로 명시 적으로 openssl이 필요하거나 openssl 설정이 올바른지 확인해야합니다. 스택 트레이스가 약간 다르긴하지만 내 애플리케이션에서 지오 코딩 시간 초과와 비슷한 문제가 발생했습니다. 지오 코딩이 완료되는 데 오랜 시간이 걸렸지 만 (예 : 주소가 실제로 이상했기 때문에) 나머지 코드는 계속 진행되었습니다. 스택 추적은 Geokit의 버그라고 생각합니다.

def full_address 
    @full_address ||= Geocoder.address("#{self.latlon.x}, #{self.latlon.y}") 
end 

또한 고려해야합니다 : 당신이 얼마나 빨리 제어 할 수 없기 때문에 이것은 당신이 최소한에 있으므로,이 통화를하고 배의 수를 줄이기 위해 처음 일을 모두 고려해야합니다 실행 full_address를 계산 된 필드로 저장하는 것은 위의 코드가 모델의 인스턴스가 처음 액세스 될 때마다 계속 실행되기 때문입니다. 그래서 full_address 필드를 추가 위 대신 코드를 제거하고 이전에 저장 후크하기 :

마이그레이션 파일 :

add_column :models, :full_address, :string 

하고 model.rb의 :

before_save :geocode_address 

def geocode_address 
    self.full_address = Geocoder.address("#{self.latlon.x}, #{self.latlon.y}") if self.changed.include?("latlon") 
end 

이 방법은 주소가 액세스 될 때마다가 아니라 latlon.x 및 latlon.y 변수가 업데이트 될 때만 실행됩니다.