Heroku上的Ruby地理编码器产生私有IP地址

时间:2015-02-28 16:35:48

标签: ruby-on-rails heroku ip rails-geocoder

Ruby Geocoder(http://rubygeocoder.com/)可以很好地获取已知地址的纬度和经度。现在我尝试使用它来按IP地址查找国家/地区代码,以便新用户不必选择他们的国家/地区。

if @person.country.blank?
    ip_loc = Geocoder.search(my_ip_address)
    if ip_loc.present?
       @person.country = ip_loc[0].data['country_code']
    end
end

要获取他们的IP地址以提供Geocoder,我使用socket:

 def my_ip_address
    require 'socket'
    list=Socket.ip_address_list
    ip = list.detect{|intf| intf.ipv4_private?}
    ip.ip_address if ip
 end

由于IP查找不适用于开发机器(IP地址始终是私有的内部号码),我试图在Heroku上测试它。

然而,当它在Heroku上运行时,我仍然返回私有IP地址172.19.75.142,无法通过Geocoder查找。

有人可以指导我从富有成效的方向获取可以在Heroku上使用的IP吗?

1 个答案:

答案 0 :(得分:3)

您可以使用request.remote_ip获取用户/客户端的IP地址。然后,您应该能够将此值提供给Geocoder。

请注意request仅在您的控制器中可用。