【问题标题】:Geocoding API not responding fast enough地理编码 API 响应速度不够快
【发布时间】:2016-04-09 21:26:42
【问题描述】:

我正在使用 Geocoder gem,但最近它似乎不起作用。

我收到此错误:

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

我正在从 development.rb 加载 IP 地址以检查地理编码器是否在本地工作,但它不能。我收到上述错误。

另外,当打印 prr 时,我得到了 nil。

我还添加了一个 geocoder.rb 初始化程序,将超时时间提高到 15 秒,但即使在浏览器加载页面 15 秒后,我仍然收到相同的消息。

它坏了吗?我应该使用其他宝石吗?如果有,您有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails ruby rails-geocoder


    【解决方案1】:

    有趣。我尝试了您的确切方法,并且遇到了同样的问题。我还尝试将超时时间增加到 60 秒,并且出现同样的错误。

    然后我注意到 Geocoder 使用了freegeoip。所以我去看看那是怎么回事。瞧,freegeoip.net 倒闭了。可疑的。

    所以我检查了Geocoder documentation 以了解他们提供的任何不同的 IP 地址查找服务。果然,在“IP地址服务”下,有多个offer。我尝试了第一个不需要 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"}>]
    

    而且它有效!但是响应没有太多信息。我建议查看 Geocoder 使用的其他 ip 查找服务。找到一个可靠的并且有足够的响应信息来满足您的需求。似乎freegeoip 是免费的,但也可能不可靠。干杯。

    编辑:找到了一些关于freegeoip.nethere的相关信息。如果你真的想使用freegeoip,看起来你可以运行你自己的实例。希望这会有所帮助!

    【讨论】:

    • 感谢您查看。但是我收到此错误Please specify a valid lookup for Geocoder (:ipinfo_io is not one of: 这很奇怪。除非我必须更新我的宝石?编辑:是的,我必须更新 gem 才能使用 ipinfo。很好用,非常感谢!似乎我不支持 https,这是否意味着我不能在 https 生产应用程序上使用它?
    • 我相信您的应用仍然可以使用 https,但是从您的服务器对 ipinfo.io 的调用将不会使用 https。根据您的用例,这可能是您可以接受的。可选地,ipinfo.io 允许使用 api 密钥和成本的 https。我鼓励您也将ipinfo.io 与其他服务进行比较!
    • 我刚刚设置了谷歌并提供了 api_key,当我尝试request.location 并打印它时,它说我在伊拉克,我不是,我位于塞浦路斯,在我的生产应用程序上,它说我在菲律宾。为什么会这样?没想到谷歌会这样......
    • 我不知道为什么会这样。也许您可以创建一个包含更多详细信息的新 SO 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2012-10-17
    相关资源
    最近更新 更多