任何人都可以帮助如何使用Ruby on Rails获取客户端IP和服务器IP?
在Rails 2.3中,我可以使用HOST来获取我的主机名,但它似乎不再可用了.我可以用什么呢?
localhost:xxxx当我从机器运行代码http://www.mysite.com时,以及在生产中运行代码时,我只想要返回(带有真实端口号)的东西.
在Rails模型中,我希望能够找到主机和端口.例如,如果我在测试环境中它会返回http://localhost:3000/ ,如果我在生产中它将返回类似的东西http://my.application.com/?
我到处搜索,但他们的解决方案需要某种形式的IP地址.以下是我找到的解决方案.
require 'socket'
#METHOD 1
ip = IPSocket.getaddress(Socket.gethostname)
puts ip
#METHOD 2
host = Socket.gethostname
puts host
#METHOD 3(uses Google's address)
ip = UDPSocket.open {|s| s.connect("64.233.187.99", 1); s.addr.last}
puts ip
#METHOD 4(uses gateway address)
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 '192.168.1.1', 1
s.addr.last
end
ensure
Socket.do_not_reverse_lookup = orig
end
ip=local_ip
puts ip
Run Code Online (Sandbox Code Playgroud)
所有这些都需要某人的IP地址.有没有使用别人的IP地址的解决方案?优选地,平台无关.
我需要使用主机来构建具有不同端口的URL.
例如,如果主机是example.com,我需要生成一个类似http://example.com:8080/的URL
我需要它是可移植的,所以当我在我的本地环境时,它显示http:// localhost:8080 /.
有任何想法吗?
因此,我希望我的Rails应用程序实例能够在我正在使用的"我正在进行"的事情上进行注册,并且我希望它能够提及它正在运行的本地端口.我似乎无法找到如何做到 - 实际上只是发现它的IP是棘手的,需要一点点黑客.
但没问题,我有IP - 但我怎样才能找到我的mongrel/thin/webrick服务器运行的端口?
要超级明确,如果我使用脚本/服务器-p 3001启动rails应用程序,我该怎么做才能在应用程序中提取3001.
我需要获取我的IP(即DHCP).我用我的environment.rb:
LOCAL_IP = `ifconfig wlan0`.match(/inet addr:(\d*\.\d*\.\d*\.\d*)/)[1] || "localhost"
Run Code Online (Sandbox Code Playgroud)
但有没有rubyway或更清洁的解决方案?
我面临以下问题:
我正在做一个 Rails 4 webapp,我们正在使用回形针作为个人资料图像。如果用户没有上传图片,我们会提供默认图片(如 Facebook 剪影占位符)。因此,随着回形针简化处理默认图像,我们在Profile模型中执行以下操作:
class Profile < ActiveRecord::Base
belongs_to :user
has_attached_file :image, :styles => { :medium => "300x300", :thumb => "100x100" }, :default_url => "assets/profiles/:style/placeholder.gif"
end
Run Code Online (Sandbox Code Playgroud)
最大的问题是我需要图像的完整 URL 而不仅仅是路径,所以我很难在该路径之前获取主机和端口。使用动作视图助手没有帮助(asset_url助手)
我正在考虑为每个环境初始化一些常量或配置或环境变量。会正确吗?还有其他建议吗?
编辑:我忘了提到这一点:资源(配置文件)可能有自定义图片或默认图片。当它有自定义图像时,我们将其存储在 Amazon S3 中,在这种情况下profile.image.url返回完整 URL。在另一种情况下,当它没有自定义图片时,它存储了一个默认图像in app/assets/images,在这种情况下profile.image.url只返回路径。我希望该方法image.url始终返回完整的 URL。– flyer88 刚刚编辑
您好,我发现如何通过此处的答案获取客户端 IP: Can I Perform a DNS Lookup (hostname to IP address) using client-side Javascript?
但我不明白如何使用它。
这就是我所拥有的:
var user;
if ($('#user-id').length) {
user = $('#user-id').text();
} else {
http://jsonip.appspot.com/?callback=getip
function getip(json){
user = json.ip;
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白如何包含 url 以及如何使用 getip 函数。
我需要将用户设置为 else 中的 IP 地址。
谢谢!