地理编码API的响应无效JSON。和request.location = nil

时间:2014-12-12 05:24:54

标签: ruby-on-rails ruby geocode

if Rails.env.development?
      @current_location_geo = Geocoder.search(request.remote_ip).first
    else
      @current_location_geo = request.location
    end
    if !@current_location_geo.nil? && @current_location_geo.ip == "127.0.0.1"
      @departure_currency_code= "AUD"
      @departure_currency_name= ["Australian Dollar(AUD $)","AUD"]
    else
      @country = Country.new(request.location.data["country_code"].to_s)
      @country_code = @country.currency.code
    end
end

我正在 request.location nil 。我试图在配置中添加超时但对我没有帮助。

生产模式中的

错误"地理编码API的响应无效JSON。"

当我追踪它时,我将request.location设为nil。

我的地理编码器版本是(1.2.6)。

2 个答案:

答案 0 :(得分:1)

<强>配置/ initalizers / geocoder.rb

Geocoder.configure(
 timeout: 10,
 ip_lookup: :telize   
)

来源:https://github.com/alexreisner/geocoder/issues/777

答案 1 :(得分:1)

您似乎没有可用的操作点来访问选定的地理位置服务。对我来说,对Google地理服务的可用请求数量太少。我只是通过注册Google应用程序服务器并添加配置Google API密钥来增加它。对于按Geo确定IP位置的服务,建议使用:telize,因为之前的回答者没有任何请求配额。我还建议您查看本地IP存储的一面,以便将它们转移到Geo位置,例如:geoip2:maxmind_local。所以你的geoconfig将如下:

<强>配置/ initalizers / geocoder.rb:

Geocoder.configure(                             
  lookup: :google,                                                 
  ip_lookup: :geoip2,                                                              
  maxmind_local: {
    package: :city                
  },                                                       
  geoip2: {
    file: File.join('vendor/share', 'GeoLite2-City.mmdb')
  },             
  google: {                        
    timeout: 20,
    use_https: true,                                                               
    api_key: ENV['GOOGLE_API_KEY']                                                 
  },       
}

注意:似乎:telize服务目前无法正常运行,返回:Geocoding API's response was not valid JSON

请参阅geocoder's README上配置goe服务的所有选项。