Rails。检索国家用户正在访问来自
Rails. Retriving country user is accessing from
我想知道是否有人知道找出用户正在访问的国家/地区的替代方法?到目前为止,我一直在使用“geocoder”——事实证明它太慢了。发送和检索的请求增加了服务器响应时间(600-800 毫秒之间)的大量时间。或者也许我错过了某种配置?
如果谁有更好的方法,请告诉我!
谢谢!
application.rb
def extract_locale_from_accept_language_header
if cookies[:windhager_locale] && I18n.available_locales.include?(cookies[:windhager_locale].to_sym)
l = cookies[:windhager_locale].to_sym
else
begin
country_code = country_code = request.location.country_code
if country_code
country_code = country_code.downcase.to_sym
case country_code
when :en
l = :int_en
when :us
l = :int_en
when :ca
# CHECK BROWSER LANGUAGE
l = check_browser_language_ca
when :nz
l = :int_en
when :au
l = :int_en
when :de
l = :de
when :fr
l = :fr
when :ch
# CHECK BROWSER LANGUAGE
l = check_browser_language_ch
when :at
l = :at
when :li
l = :ch_de
when :rd
l = :at
else
l = check_browser_language
end
else
l = check_browser_language
end
rescue
l = I18n.default_locale
ensure
cookies.permanent[:windhager_locale] = l
end
end
return l
end
假设您现在正在进行远程 API 调用,您可以从 MaxMind 下载 IP 数据库并进行本地查找而不是 API 调用。这种方法对我的用例非常有效。 Checkout the documentation from the geocoder github page 了解更多详情,但这里有一个例子:
Geocoder.configure(ip_lookup: :maxmind_local, maxmind_local: {file: File.join('folder', 'GeoLiteCity.dat')})
我想知道是否有人知道找出用户正在访问的国家/地区的替代方法?到目前为止,我一直在使用“geocoder”——事实证明它太慢了。发送和检索的请求增加了服务器响应时间(600-800 毫秒之间)的大量时间。或者也许我错过了某种配置?
如果谁有更好的方法,请告诉我!
谢谢!
application.rb
def extract_locale_from_accept_language_header
if cookies[:windhager_locale] && I18n.available_locales.include?(cookies[:windhager_locale].to_sym)
l = cookies[:windhager_locale].to_sym
else
begin
country_code = country_code = request.location.country_code
if country_code
country_code = country_code.downcase.to_sym
case country_code
when :en
l = :int_en
when :us
l = :int_en
when :ca
# CHECK BROWSER LANGUAGE
l = check_browser_language_ca
when :nz
l = :int_en
when :au
l = :int_en
when :de
l = :de
when :fr
l = :fr
when :ch
# CHECK BROWSER LANGUAGE
l = check_browser_language_ch
when :at
l = :at
when :li
l = :ch_de
when :rd
l = :at
else
l = check_browser_language
end
else
l = check_browser_language
end
rescue
l = I18n.default_locale
ensure
cookies.permanent[:windhager_locale] = l
end
end
return l
end
假设您现在正在进行远程 API 调用,您可以从 MaxMind 下载 IP 数据库并进行本地查找而不是 API 调用。这种方法对我的用例非常有效。 Checkout the documentation from the geocoder github page 了解更多详情,但这里有一个例子:
Geocoder.configure(ip_lookup: :maxmind_local, maxmind_local: {file: File.join('folder', 'GeoLiteCity.dat')})