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')})