1

Rails アプリ (Passenger 3 + Nginx にデプロイ) をセットアップして、MaxMind の GeoLite シティと連携させようとしましたが、うまくいきませんでした。

# nginx.conf
# IP Geolocation - City Level
geoip_city /usr/share/GeoIP/GeoLiteCity.dat;
passenger_set_cgi_param HTTP_GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
passenger_set_cgi_param HTTP_GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3;
passenger_set_cgi_param HTTP_GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name;
passenger_set_cgi_param HTTP_GEOIP_REGION $geoip_region;
passenger_set_cgi_param HTTP_GEOIP_CITY $geoip_city;
passenger_set_cgi_param HTTP_GEOIP_POSTAL_CODE $geoip_postal_code;
passenger_set_cgi_param HTTP_GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;
passenger_set_cgi_param HTTP_GEOIP_LATITUDE $geoip_latitude;
passenger_set_cgi_param HTTP_GEOIP_LONGITUDE $geoip_longitude;

次に、Rails アプリで次のようにします。

geodata = {
  country_code: request.env["HTTP_GEOIP_CITY_COUNTRY_CODE"],
  country_name: request.env["HTTP_GEOIP_CITY_COUNTRY_NAME"],
  region: request.env["HTTP_GEOIP_REGION"],
  city_name: request.env["HTTP_GEOIP_CITY"],
  zipcode: request.env["HTTP_GEOIP_POSTAL_CODE"],
  lat: request.env["HTTP_GEOIP_LATITUDE"],
  lng: request.env["HTTP_GEOIP_LONGITUDE"]
}

ただし、すべての値に対して常に nil を返します。変数を正しく設定していますか? geo データベースが正しく構成されていませんか? Nginx はエラーをスローせず、--with-http_geoip_moduleコンパイル フラグが設定されます。

4

1 に答える 1

1

これを理解しました。ブロックで指定するだけでなくgeoip_city、ブロックでディレクティブhttp {}を指定し、変数の前にプレフィックスを付けて、変数が渡されるようにする必要があることがわかりました。passenger_set_cgi_paramserver {}HTTP_

于 2013-02-27T19:51:12.950 に答える