18

如何使用 Rails 获取我自己的 IP 地址?

当我这样做时,我得到了:127.0.0.1

@ip = request.remote_ip

有没有办法获得公共IP?

4

6 回答 6

42

尝试:

require 'socket'
ip=Socket.ip_address_list.detect{|intf| intf.ipv4_private?}
ip.ip_address if ip
于 2012-08-10T08:07:18.130 回答
1

我相信request.env['SERVER_NAME']有效,如果你想反映服务器基地址

于 2016-12-06T11:14:03.113 回答
0

试试这个:

request.env['REMOTE_ADDR']
于 2012-08-10T07:35:25.523 回答
0

使用您的 IP 调用页面,而不是本地主机。即,192.168.2.9:3000在默认开发环境的情况下会产生:

request.env['REMOTE_ADDR']
#=> 192.168.2.9

或者:

request.remote_ip 
#=> 192.168.2.9 
于 2012-08-10T08:11:55.280 回答
0

由于您的请求是服务器本地的,因此它返回“localhost”地址,即127.0.0.1. 如果您从托管在 Internet 上的计算机请求它,它将为您提供远程服务器的静态 IP。

如果您想要自己互联网的静态 IP,请访问http://ping.eu,您可以看到您的公共 IP。

于 2012-08-10T13:12:12.337 回答
0

这并不能回答这个问题。我认为其他人会发现这个答案很有帮助。

问题:

我正在开发一个移动应用程序。所以,当我//debug应用程序在真正的移动设备中时。图片 url 不适用于.hot reloadlive reloadlocalhost:3000

图像与 ip 一起使用,如下所示:http://192.168.0.102:3000/user/1/profile-223hfkj33.jpg

Problem is每次打开笔记本电脑并连接到wifi路由器时,笔记本电脑的ip都会改变。因此,每次我需要更改文件asset_host时。environments/development.rb

查看以前的答案,我找到了解决方案:

解决方案:

environments/development.rb我写这段代码:

server_address = "#{Socket.ip_address_list.detect(&:ipv4_private?).try(:ip_address)}:3000"
config.asset_host = server_address

puts "Server address: #{server_address}"
# when I run `rails s`, this line prints server address in console

所以,它asset_host是这样设置的:192.168.0.102:3000
当我打开笔记本电脑时,笔记本电脑会获得新的 IP 地址并且它可以工作。

于 2021-01-26T05:45:06.340 回答