API геокодирования не отвечает достаточно быстро

Я использую гем Geocoder, но в последнее время он не работает.

Я получаю эту ошибку:

Geocoding API not responding fast enough (use Geocoder.configure(:timeout => ...) to set limit).

Мой application_controller.rb:

before_filter :lookup_ip_location

  private

    def lookup_ip_location
      if Rails.env.development?
        prr = Geocoder.search(request.remote_ip).first
        p "this is #{prr.inspect}"
      else
        request.location
      end
    end

Это development.rb:

# test geocoder gem locally
  class ActionDispatch::Request
    def remote_ip
      "71.212.123.5" # ipd home (Denver,CO or Renton,WA)
      # "208.87.35.103" # websiteuk.com -- Nassau, Bahamas
      # "50.78.167.161" # HOL Seattle, WA
    end
  end

Я загружаю IP-адреса из development.rb, чтобы проверить, работает ли геокодер локально, но это не так. Я получаю вышеуказанную ошибку.

Кроме того, при печати prr я получаю ноль.

Я также добавил инициализатор geocoder.rb, чтобы увеличить время ожидания до 15 секунд, но даже после 15 секунд загрузки страницы браузером я все еще получаю то же сообщение.

Он сломан? Должен ли я использовать другой камень? Если да, то есть ли у вас какие-либо предложения?


person Petros Kyriakou    schedule 09.04.2016    source источник


Ответы (1)


Интересный. Я попробовал ваши точные методы и столкнулся с теми же проблемами. Я также попытался увеличить тайм-аут до 60 секунд и та же ошибка.

Затем я заметил, что Geocoder использует freegeoip. Поэтому я пошел посмотреть, что это такое. И вот, freegeoip.net не работает. Подозрительный.

Поэтому я проверил документацию Geocoder на наличие различных служб поиска IP-адресов, которые они предложение. Конечно, в разделе «Услуги IP-адресов» есть несколько предложений. Я попробовал первый, который не требует ключа API, который был :ipinfo_io.

[18] pry(main)> Geocoder.configure(ip_lookup: :ipinfo_io)
=> {:timeout=>30,
 :lookup=>:google,
 :ip_lookup=>:ipinfo_io,
 :language=>:en,
 :http_headers=>{},
 :use_https=>false,
 :http_proxy=>nil,
 :https_proxy=>nil,
 :api_key=>nil,
 :cache=>nil,
 :cache_prefix=>"geocoder:",
 :basic_auth=>{},
 :logger=>:kernel,
 :kernel_logger_level=>2,
 :always_raise=>[],
 :units=>:mi,
 :distances=>:linear}
[19] pry(main)> Geocoder.search("144.138.175.101")
=> [#<Geocoder::Result::IpinfoIo:0x007fce5da5fe28 @cache_hit=nil, @data={"ip"=>"144.138.175.101", "city"=>"", "region"=>"", "country"=>"AU", "loc"=>"-27.0000,133.0000"}>]

И это работает! Но в ответе мало информации. Я бы порекомендовал взглянуть на другие службы поиска IP-адресов, которые использует Geocoder. Найдите тот, который надежен и имеет достаточно информации для ваших нужд. Кажется, что freegeoip бесплатен, но также может быть ненадежным. Ваше здоровье.

РЕДАКТИРОВАТЬ: нашел некоторую связанную информацию о freegeoip.net здесь. Если вы действительно хотите использовать freegeoip, похоже, вы можете запустить свой собственный экземпляр. Надеюсь это поможет!

person Anthony To    schedule 09.04.2016
comment
Спасибо за проверку его. Однако я получаю эту ошибку Please specify a valid lookup for Geocoder (:ipinfo_io is not one of: , это странно. если я не должен обновить свой драгоценный камень? РЕДАКТИРОВАТЬ: да, мне пришлось обновить драгоценный камень, чтобы использовать ipinfo. отлично работает, большое спасибо! Кажется, я не поддерживаю https, значит ли это, что я не могу использовать его в рабочем приложении https? - person Petros Kyriakou; 10.04.2016
comment
Я считаю, что ваше приложение все еще может использовать https, но вызовы ipinfo.io с вашего сервера не будут использовать https. В зависимости от вашего варианта использования это может быть приемлемо для вас. При желании ipinfo.io разрешает https с ключом API и стоимостью. Я призываю вас также сравнить ipinfo.io с другими сервисами! - person Anthony To; 10.04.2016
comment
Я только что настроил Google и предоставил api_key, и когда я пытаюсь request.location распечатать его, он говорит, что я в Ираке, а это не так, я нахожусь на Кипре, в моем производственном приложении это говорит, что я нахожусь на Филиппинах. Почему? Не ожидал такого от Google... - person Petros Kyriakou; 10.04.2016
comment
Я не уверен, почему это произошло. Возможно, вы можете создать новый вопрос SO с более подробной информацией. - person Anthony To; 10.04.2016