Ruby Geocoder выдает ошибку

Я работаю над RoR и использую Ruby Geocoder для идентификации IP. Фрагмент кода, который я использую, приведен ниже.

Gemfile

gem "geocoder"

Затем для получения страны я использую

country = request.location.country

Раньше он работал отлично, но теперь он выдает ошибку типа undefined method country for nil class.

Я не могу понять проблему. Может ли кто-нибудь помочь мне найти решение или предложить какой-либо другой камень в API для поиска страны на основе IP-адреса?

Спасибо
С уважением


person apr    schedule 03.01.2014    source источник
comment
Вам нужно поделиться большим количеством кода. Все, что мы знаем о том, чем вы поделились, пока request.location возвращает nil.   -  person Peter Alfvin    schedule 03.01.2014
comment
Спасибо за быстрый повтор. Извините, что я использую только этот код для получения страны. Раньше это было прекрасное возвращение страны. Теперь возникает сомнение, почему request.location выдает нулевую ошибку. Были ли какие-либо обновления в последнее время?   -  person apr    schedule 03.01.2014
comment
Чтобы было ясно, request.location не выдает никакой ошибки. Он просто возвращает nil. Однако должно быть больше кода, так как request не определен как есть.   -  person Peter Alfvin    schedule 03.01.2014
comment
@PeterAlfvin, но когда я использую request.ip, я могу получить IP-адрес. Код, который я использую, взят непосредственно с сайта rubygeocoder.com.   -  person apr    schedule 03.01.2014


Ответы (2)


Похоже, возникла проблема со службой Geocoder. Даже мое приложение, работающее на AWS, давало ту же проблему в течение последних 36 часов. Теперь все работает хорошо. Я ничего не делал, что заставляет меня предположить, что с Geocoder что-то не так, что они, по-видимому, исправили сейчас.

Интересно, случалось ли это в прошлом, поскольку это, безусловно, беспокоит меня.

person saihgala    schedule 03.01.2014
comment
Спасибо, Для меня также Это произошло со вчерашнего утра. Я также проверю свой сейчас, потому что у меня есть жестко закодированный для плавной работы приложения. - person apr; 03.01.2014
comment
Это полностью зависит от используемого сервиса. Если вы используете карты по умолчанию (Google Maps), маловероятно, что служба не работала так долго, IMO. - person zeantsoi; 03.01.2014
comment
@zeantsoi на самом деле я использую Google Maps. - person saihgala; 03.01.2014

Если вы работаете в локальной среде разработки, request.location, скорее всего, вернет nil. Согласно документам:

Обратите внимание, что [request.location] обычно возвращает nil в средах тестирования и разработки, потому что такие вещи, как «localhost» и «0.0.0.0», не являются IP-адресами в Интернете.

Соответственно, конкретные проблемы, связанные с исключением nil, должны, по большей части, ограничиваться средами разработки. При локальной разработке nil исключения можно обрабатывать с помощью обработки исключений Ruby или try метода Rails. :

request.location.try(:country)

ОБНОВЛЕНИЕ:

Как объясняет @nonocut в своем ответе, эта проблема, упомянутая в вопросе, может быть связана с какой-то проблемой с Google Maps. Тем не менее, важно уметь справляться с такими сбоями с помощью обработки исключений — это хорошо для локальной разработки и обеспечивает прагматичное развертывание.

person zeantsoi    schedule 03.01.2014
comment
Спасибо за ответ. В моей тестовой среде возникает ошибка. - person apr; 03.01.2014
comment
Некоторые промежуточные среды являются локальными — у вас? - person zeantsoi; 03.01.2014
comment
Нет, мы используем aws ec2 с определенным DNS. - person apr; 03.01.2014