在 Rails 上为 Geocoder 使用多个 api 键
Use multiple api keys for Geocoder on Rails
我正在使用 Rails 地理编码器 gem 对用户提交的街道地址的纬度和经度进行地理编码。我还想自动拉取用户的 IP 位置,以在其位置附近使用其他用户提交的地址填充主屏幕。
我想使用 IPinfo 的 API 密钥来获取用户的位置,并使用 Google 的不同 API 密钥对 lat/lng 进行地理编码街道地址。以前,当我调出两个 api 键时,我收到一条警告消息,指出第一个键被第二个键覆盖,可能是因为它们具有相同的名称。
我看到之前的 post 用户回答说他们可以通过 passing the service as a lookup value 做到这一点,但他们是如何在 geocoder.rb 配置中设置 api 键的文件?他们是否更改了第二项服务的 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
经过进一步搜索和配置后,我终于弄清楚了如何在 Rails 上使用 Geocoder 的多个 API 键。回答我自己的问题,以防其他人遇到同样的问题。
Rails Geocoder 文档确实会告诉您如何 use multiple apis 但不会确切地告诉您如何针对不同的服务进行配置(至少对于像我这样的菜鸟而言)。我最终不得不将服务的特定符号传递给我希望服务使用的选项,例如:
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
我正在使用 Rails 地理编码器 gem 对用户提交的街道地址的纬度和经度进行地理编码。我还想自动拉取用户的 IP 位置,以在其位置附近使用其他用户提交的地址填充主屏幕。
我想使用 IPinfo 的 API 密钥来获取用户的位置,并使用 Google 的不同 API 密钥对 lat/lng 进行地理编码街道地址。以前,当我调出两个 api 键时,我收到一条警告消息,指出第一个键被第二个键覆盖,可能是因为它们具有相同的名称。
我看到之前的 post 用户回答说他们可以通过 passing the service as a lookup value 做到这一点,但他们是如何在 geocoder.rb 配置中设置 api 键的文件?他们是否更改了第二项服务的 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
经过进一步搜索和配置后,我终于弄清楚了如何在 Rails 上使用 Geocoder 的多个 API 键。回答我自己的问题,以防其他人遇到同样的问题。
Rails Geocoder 文档确实会告诉您如何 use multiple apis 但不会确切地告诉您如何针对不同的服务进行配置(至少对于像我这样的菜鸟而言)。我最终不得不将服务的特定符号传递给我希望服务使用的选项,例如:
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