Разработвам Rails в Ubuntu 12.04LTS OS.
Искам да заснема своя локален IP адрес във файл, а не loopback 127.0.0.1, този, който получавам с помощта на ifconfig
. Моля, предложете решение.
Разработвам Rails в Ubuntu 12.04LTS OS.
Искам да заснема своя локален IP адрес във файл, а не loopback 127.0.0.1, този, който получавам с помощта на ifconfig
. Моля, предложете решение.
Използвайте Socket::ip_address_list .
Socket.ip_address_list #=> Array of AddrInfo
Socket.ip_address_list.find {|a| a.ipv4? ? !(a.ipv4_private? || a.ipv4_loopback?) : !(a.ipv6_sitelocal? || a.ipv6_linklocal? || a.ipv6_loopback?) }
- person Sigurd; 24.12.2012
puts Socket.ip_address_list.find { |a| a.ipv4_private? && !a.ipv4_loopback? }.ip_address
- person bradw2k; 15.07.2021
Това е първият ми начин:
require 'socket'
def local_ip
orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution temporarily
UDPSocket.open do |s|
s.connect '64.233.187.99', 1
s.addr.last
end
ensure
Socket.do_not_reverse_lookup = orig
end
# irb:0> local_ip
# => "192.168.0.127"
Това е вторият ми начин, който не се препоръчва:
require 'socket'
Socket::getaddrinfo(Socket.gethostname,”echo”,Socket::AF_INET)[0][3]
Третият начин:
UDPSocket.open {|s| s.connect('64.233.187.99', 1); s.addr.last }
И четвърти начин:
Use Socket#ip_address_list
Socket.ip_address_list #=> Array of AddrInfo
Напишете метода по-долу
def self.local_ip
orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true
UDPSocket.open do |s|
s.connect '64.233.187.99', 1
s.addr.last
end
ensure
Socket.do_not_reverse_lookup = orig
end
и след това извикайте метода local_ip, ще получите ip адреса на вашата машина.
Eg: ip_address= local_ip
request.remote_ip
ref [this][1] [1]: stackoverflow.com/questions/3887943 /ip-address-in-rails - person Salil   schedule 24.12.2012