获取自己的IP地址

时间:2012-08-10 07:30:58

标签: ruby-on-rails ruby

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

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

@ip = request.remote_ip

有没有办法获得公共IP?

6 个答案:

答案 0 :(得分:35)

尝试:

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

答案 1 :(得分:1)

如果您想反映服务器基地址

,我相信request.env['SERVER_NAME']有效

答案 2 :(得分:0)

试试这个:

request.env['REMOTE_ADDR']

答案 3 :(得分:0)

使用您的IP而不是localhost来调用页面。即,在默认开发环境的情况下,192.168.2.9:3000将产生:

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

或:

request.remote_ip 
#=> 192.168.2.9 

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

问题:

我正在开发一个移动应用。所以,当我在真实的移动设备上debug/hot reload/live reload 应用程序时。图片网址不适用于 localhost: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 地址并且可以正常工作。