ruby-on-rails - 使い方 - rails geocoder 緯度経度



ジオコーダー、ipが127.0.0.1のときにローカルでテストする方法? (4)

私のローカルIPアドレスは127.0.0.1なので、ジオコーダーを正しく動作させることができないので、正しい場所に配置できません。

request.location.ipは "127.0.0.1"を示しています。

別のIPアドレス(私のインターネット接続IP)を使用して、より関連性の高いデータを取得するにはどうすればよいですか。


Answer #1

このために私は通常params[:ip]か開発中の何かを使います。 それは私が機能性のために他のIPアドレスをテストして、私が世界のどこにでもいるふりをすることを可能にします。

例えば

class ApplicationController < ActionController::Base
  def request_ip
    if Rails.env.development? && params[:ip]
      params[:ip]
    else
      request.remote_ip
    end 
  end
end

Answer #2

これは、開発およびテスト環境用にハードコーディングされたIPを提供するためのジオコーダー1.2.9の更新された回答です。 これをconfig/initilizers/geocoder.rb一番下に置くだけです。

if %w(development test).include? Rails.env
  module Geocoder
    module Request
      def geocoder_spoofable_ip_with_localhost_override
        ip_candidate = geocoder_spoofable_ip_without_localhost_override
        if ip_candidate == '127.0.0.1'
          '1.2.3.4'
        else
          ip_candidate
        end
      end
      alias_method_chain :geocoder_spoofable_ip, :localhost_override
    end
  end
end

Answer #3

またこれをするかもしれません

request.safe_location

Answer #4

私はこれをわずかに異なって実行しました、そして、これは私の場合にはうまくいきます。

application_controller.rbでは、request.remote_ipの結果を直接渡すジオコーダーIPルックアップを呼び出すルックアップメソッドがあります。

def lookup_ip_location
  if Rails.env.development?
    Geocoder.search(request.remote_ip).first
  else
    request.location
  end
end

それからconfig/environments/development.rb remote_ip呼び出しをモンキーパッチしました。

class ActionDispatch::Request
  def remote_ip
    "71.212.123.5" # ipd home (Denver,CO or Renton,WA)                                                                                                                                                                                                                                                                        
    # "208.87.35.103" # websiteuk.com -- Nassau, Bahamas                                                                                                                                                                                                                                                                      
    # "50.78.167.161" # HOL Seattle, WA                                                                                                                                                                                                                                                                                       
  end
end

私はちょうどいくつかのアドレスをハードコードします、しかし、あなたはあなたがここで好きなことは何でもすることができました。





geocode