Задержка гемокодера, вызывающая сбой страницы - PullRequest
1 голос
/ 05 декабря 2011

Я больше не знаю, как сделать мой код красивым и чистым ... и я до сих пор получаю нулевой объект местоположения в некоторых случаях, которого я стараюсь избегать ... и я не могу воспроизвести ошибку в офис. До тех пор я получаю эту ошибку по электронной почте, когда приложение не может найти широту или код страны по nil-объекту (объекту местоположения)

Так, что я должен сделать, чтобы убедиться, что местоположение "Париж, Франция" - это IP-адрес или адрес не работает для Geocoder?

def find_current_location_from_ip(ip)
    unless Geocoder.search(ip).nil? || Geocoder.search(ip)[0].nil?
      @location = Geocoder.search(ip)[0].country_code == "RD" ? 
          Geocoder.search("Paris, France")[0] : Geocoder.search(ip)[0]
    else
      @location = Geocoder.search("Paris, France")[0]
    end
    @location
end

def find_current_location_from_address(address)
    Geocoder.search(address).blank? ? 
        Geocoder.search("Paris, France")[0] : Geocoder.search(address)[0]
end

Любые советы будут фантастическими. Кроме того, похоже, что если я обновлю страницу, то местоположение станет неожиданно правильным, а код страны при нулевом объекте исчезнет ... ??

Меня немного смущает, что я могу обратиться к последним только сейчас.

Приветствия,

Joel

1 Ответ

0 голосов
/ 21 февраля 2012

Иногда Geocoder может вернуть ошибку, не вызывая исключение. Это происходит, когда используемый вами API (google, yahoo и т. Д.) Возвращает ошибку API. API по умолчанию - Google. У них ежедневный лимит запросов 2500, который, если вы не используете ключ API, на который вы подписались, использует IP-адрес сервера, чтобы определить, превышен ли лимит. Это наиболее вероятная причина вашей проблемы.

Перед тем, как обращаться к ней, вам необходимо убедиться, что в переменной @location действительно есть данные.

Полагаю, вы можете проверить так:

puts @location[:country_code] unless @location.empty?

...