我想获得系统的真实IP,以便我可以进一步获取位置(使用地理编码器gem)。我正在使用devise gem的可跟踪模块来获取用户的IP。当我尝试对IP进行地理编码时,它会失败,因为devise返回的 last_signed_in_ip 始终为127.0.0.1。我仔细检查了浏览器中的位置权限,这似乎不是一个问题,因为它可以跟踪那里的位置。什么可能是错的?
此外,是否有更好的方法来找出一个位置(除了跟踪IP地址然后对其进行地理编码?)。是否可以再次要求用户允许在应用程序内进行位置跟踪,以防他不允许或不知道此类设置?
提前感谢所有帮助。
由于
答案 0 :(得分:0)
request.remote_ip
将解决您的问题...
它永远不会返回您自己的m / c地址,而是如果您需要远程地址来(测试)地理编码,我建议将127.0.0.1添加到数据库表中,使IP地址与位置相匹配
你可以像这样硬编码用于测试目的:
if request.remote_ip == '127.0.0.1'
# Hard coded remote address
'123.45.67.89'
else
request.remote_ip
end
答案 1 :(得分:0)
如果您想以编程方式返回外部IP地址,则需要从该地址访问您的应用程序。
当您在localhost访问您的应用时,request.remote_ip
将返回127.0.0.1,因为这是您的本地主机IP地址。
要解决此问题,您可以将开发端口(通常为3000)从路由器转发到PC,然后通过在浏览器中输入外部IP地址而不是localhost来访问您的应用程序(例如:123.123.123.123:3000)
或者将您的外部IP地址添加到指向localhost的主机文件中(例如:localhost 123.123.123.123
),然后通过您的外部IP地址浏览到您的应用程序。