ruby-on-railsip-geolocation

Getting a user country name from originating IP address with Ruby on Rails


I want to extract a user country name from visitors' IP addresses.

I could get the IP address with remote_ip. But what could be the easiest way to get the country name?

It doesn't have to be super accurate. Any ruby library (gem or plugin) to do this?

I want an simple and easy solution for this.


Solution

  • You can use geoip gem.

    environment.rb

    config.gem 'geoip'
    

    Download GeoIP.dat.gz from http://www.maxmind.com/app/geolitecountry. unzip the file. The below assumes under #{RAILS_ROOT}/db dir.

    @geoip ||= GeoIP.new("#{RAILS_ROOT}/db/GeoIP.dat")    
    remote_ip = request.remote_ip 
    if remote_ip != "127.0.0.1" #todo: check for other local addresses or set default value
      location_location = @geoip.country(remote_ip)
      if location_location != nil     
        @model.country = location_location[2]
      end
    end