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)。
Google
地理服务的可用请求数量太少了。我只是通过在
Google
应用程序服务上注册并放入配置 Google API 密钥来创建它。对于通过
Geo
确定
IP
位置的服务,建议使用
:telize
,因为它当前没有先前应答者的任何请求配额。我还建议您查看本地 IP 存储的侧面,将它们解析到地理位置,例如
:geoip2
和
:maxmind_local
。所以你的地理配置将如下所示:
config/initializers/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服务的所有选项。