2013-02-27 4 views
1

Я пытаюсь настроить приложение Rails (развернутое на Passenger 3 + Nginx) для работы с GeoLite города MaxMind, но безрезультатно.Использование GeoIP с приложением Nginx/Passenger in Rails

# 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"] 
} 

Но он всегда возвращает ноль для всех значений. Правильно ли устанавливаю переменные? Неправильно ли настроена геода база данных? Nginx не выдает никаких ошибок и установлен флаг компиляции --with-http_geoip_module.

ответ

1

Понял это. Оказывается, кроме указания geoip_city в вашем блоке http {}, вы также должны указать директивы passenger_set_cgi_param в своем блоке server {} и префикс своих переменных HTTP_, чтобы они прошли.

Смежные вопросы