Используйте несколько ключей API для Geocoder on Rails

Я использую гем Rails Geocoder для геокодирования широты и долготы адреса улицы, отправленного пользователем. Я также хотел бы автоматически получать IP-адрес пользователей, чтобы заполнить домашний экран другими отправленными пользователями адресами рядом с их местоположением.

Я хотел бы использовать ключ API для IPinfo, чтобы получить местоположение пользователя, и другой ключ API для Google, чтобы геокодировать широту/долготу адреса улицы. Ранее, когда я вызываю два ключа API, я получаю предупреждающее сообщение о том, что первый ключ был перезаписан вторым, вероятно, потому, что они имели одинаковое имя.

Я видел это предыдущее сообщение, где пользователь ответил, что может сделать это, передав сервис в качестве значения поиска, но как они настроили ключ API в файле конфигурации geocoder.rb? Они изменили имя API для второго сервиса? Им пришлось добавить еще один файл конфигурации?

Любая помощь вообще будет оценена по достоинству. Мой текущий файл конфигурации ниже. На данный момент я закомментировал поиск IPinfo, чтобы по-прежнему иметь возможность геокодировать элементы в производстве. Спасибо.

if Rails.env.production?
  Geocoder.configure(
    # Geocoding options
    timeout: 5,                 # geocoding service timeout (secs)
    lookup: :google,         # name of geocoding service (symbol)
    # ip_lookup: :ipinfo_io,      # name of IP address geocoding service (symbol)
    # api_key: ENV['IPINFO_IO_API_KEY'],   #API key for ip lookup service
    # language: :en,              # ISO-639 language code
    use_https: true,           # use HTTPS for lookup requests? (if supported)
    # http_proxy: nil,            # HTTP proxy server (user:pass@host:port)
    # https_proxy: nil,           # HTTPS proxy server (user:pass@host:port)
    api_key: ENV['GOOGLE_GEOCODER_API_KEY'],    # API key for geocoding service
    # cache: Redis.new,                 # cache object (must respond to #[], #[]=, and #del)
    # cache_prefix: 'geocoder:',  # prefix (string) to use for all cache keys

    # Exceptions that should not be rescued by default
    # (if you want to implement custom error handling);
    # supports SocketError and Timeout::Error
    # always_raise: [],

    # Calculation options
    # units: :mi,                 # :km for kilometers or :mi for miles
    # distances: :linear          # :spherical or :linear
  )
end

person Splohr    schedule 13.04.2021    source источник
comment
Как насчет того, чтобы вы прокомментировали этот другой вопрос (или ответ), чтобы получить более подробную информацию?   -  person MrUpsidown    schedule 13.04.2021
comment
@MrUpsidown, ха-ха, я пытался прокомментировать парня, который дал ответ, но мне не хватает минимальной оценки репутации, чтобы прокомментировать. Вам нужно 15, а у меня только 13.   -  person Splohr    schedule 14.04.2021


Ответы (1)


После дальнейших поисков и настройки я наконец понял, как использовать несколько ключей API с Geocoder on Rails. Отвечая на мой собственный вопрос, если у кого-то еще есть такая же проблема.

Документы Rails Geocoder рассказывают вам, как использовать несколько API, но не совсем то, как настроить для разных сервисов (по крайней мере для нуба вроде меня). В итоге мне пришлось передать конкретный символ службы параметру, который я хотел использовать для службы, например:

lookup: :google,         # name of geocoding service (symbol)
    google: {
      api_key: ENV['GOOGLE_GEOCODER_API_KEY'],    # API key for geocoding service
    }

Пожалуйста, смотрите полный код ниже.

 if Rails.env.production?
  Geocoder.configure(
    # Geocoding options
    timeout: 5,                 # geocoding service timeout (secs)
    lookup: :google,         # name of geocoding service (symbol)
    google: {
      api_key: ENV['GOOGLE_GEOCODER_API_KEY'],    # API key for geocoding service
    },
    ip_lookup: :ipinfo_io,      # name of IP address geocoding service (symbol)
    ipinfo_io: {
      api_key: ENV['IPINFO_IO_API_KEY'],   #API key for ip lookup service
    },
      # language: :en,              # ISO-639 language code
    use_https: true,           # use HTTPS for lookup requests? (if supported)
    # http_proxy: nil,            # HTTP proxy server (user:pass@host:port)
    # https_proxy: nil,           # HTTPS proxy server (user:pass@host:port)
    
    # cache: Redis.new,                 # cache object (must respond to #[], #[]=, and #del)
    # cache_prefix: 'geocoder:',  # prefix (string) to use for all cache keys

    # Exceptions that should not be rescued by default
    # (if you want to implement custom error handling);
    # supports SocketError and Timeout::Error
    # always_raise: [],

    # Calculation options
    # units: :mi,                 # :km for kilometers or :mi for miles
    # distances: :linear          # :spherical or :linear
  )
end
person Splohr    schedule 25.05.2021