我有Rails 2.3.8、Ruby 1.8.7、Mongrel Web服务器和MySQL数据库.

我在development mode岁,我需要find the real IP address

当我使用request.remote_ip时,我得到的IP为127.0.0.1

我知道我得了127.0.0.1分,因为我是在本地机器上开发的..但是,即使我在本地机器上,也有办法获得真正的ip地址吗?

我在我的控制器中使用了下面提到的这些,我得到的是127.0.0.1,所有这些都在视图中.

request.remote_ip
request.env["HTTP_X_FORWARDED_FOR"]
request.remote_addr
request.env['REMOTE_ADDR']

推荐答案

据我所知,没有标准的方法来获取本地机器的远程地址.如果您需要远程地址(测试)地理编码,我建议将127.0.0.1添加到数据库表中,以匹配IP地址和位置.

作为最后手段,你也可以硬编码你的远程地址.例如,像这样:

class ApplicationController < ActionController::Base
  def remote_ip
    if request.remote_ip == '127.0.0.1'
      # Hard coded remote address
      '123.45.67.89'
    else
      request.remote_ip
    end
  end
end

class MyController < ApplicationController
  def index
    @client_ip = remote_ip()
  end
end

Ruby-on-rails相关问答推荐

查询Where Date.parse Rails

包含字母和数字组合的正则表达式

获取所有属于模型的嵌套对象

Rails 连接并包含连接表中的列

插件和 Ruby gem 之间的区别?

如何获取 Rails 表单构建器将为某个字段生成的 HTML名称属性?

rails 3 - link_to 销毁不工作

如何从 ActiveRecord 中的每个组中获取最新记录?

如何将自定义路由添加到资源路由

格式化日期对象以显示人类可读的日期

参数错误:范围主体需要可调用

我如何在具有活动记录的 Rails 中使用两个不同的数据库?

为什么 Ruby on Rails 使用 http://0.0.0.0:3000 而不是 http://localhost:3000?

是否可以设置 travis 来运行多种语言的测试?

ruby/ruby on rails 内存泄漏检测

Rspec:如何在控制器规范中分配实例变量

将 Rails 服务器绑定到 0.0.0.0 能给你带来什么?

Ruby:如何将一种方法接收到的所有参数和块传递给另一种方法?

Ruby 1.9.2 和 Rails 3 无法打开 rails 控制台

将数组传递到 hidden_​​field ROR