如何使用Rails获取自己的IP地址?
当我这样做的时候,我得到了:127.0.0.1
@ip = request.remote_ip
有没有办法获得公共IP?
答案 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 地址并且可以正常工作。