Является ли request.location в жемчужине геокодера слишком медленным для героку?

За последнюю неделю я заметил, что на страницах, где я использую гем Geocoder для request.location, мое приложение heroku часто отображает

Application Error
An error occurred in the application and your page could not be served. Please try again in a few moments.  
If you are the application owner, check your logs for details.  

Журналы показывают

Geocoding API not responding fast enough (use Geocoder.configure(:timeout => ...)  

Раньше я никогда не замечал этой проблемы, но, возможно, она была всегда, просто до недавнего времени я не очень часто заходил на страницы с проблемой. Возникновение тайм-аута по сравнению с доступом к странице кажется случайным.

Поэтому я добавил

Geocoder.configure(
  :timeout => 40
)

в мою конфигурацию/initializers/geocoder.rb. Я думаю, что это привело к более частому доступу к странице, но часто требуется некоторое время для загрузки.

Я применяю почтовый индекс по умолчанию на этих страницах, чтобы не получать ошибок приложений, но это не идеально в долгосрочной перспективе.

Я пытался

if params[:search].present?
   @events = Event.near(params[:search], params[:dist], order: 'distance') 
elsif user_signed_in? && current_user.address
  @events = Event.near([current_user.latitude, current_user.longitude], 25, order: 'distance') 
elsif request.location 
  @events = Event.near([request.location.latitude, request.location.longitude], 25, order: 'distance') 
else
  @events = Event.near(20016, 100, order: 'distance')

ожидая получить почтовый индекс по умолчанию 20016, когда истечет время ожидания request.location, но я все еще получаю ошибку приложения.

Любые другие предложения?


person ThinQtv    schedule 21.11.2014    source источник


Ответы (1)


Если вы установите тайм-аут для драгоценного камня Geocoder, вам нужно будет установить его менее чем на 30 секунд, именно столько времени у вас есть для каждого запроса к Heroku. Когда время ожидания установлено на 40 секунд, запрос геокодера к службе IP-геолокации истечет через 40 секунд, но в тот момент, когда Heroku уже истечет время ожидания запроса, и вы увидите ошибку приложения H12. Установите тайм-аут на что-то менее 30 секунд, и вы, по крайней мере, должны увидеть почтовый индекс по умолчанию.

Метод Geocoder request.location попытается геокодировать IP-адрес запроса, используя службу IP-геокодирования по умолчанию, FreeGeoIP. Кажется, в последнее время (ноябрь 2015 г.) у них были некоторые проблемы. Вы можете попробовать один из других IP-сервисов (например, Telize), чтобы посмотреть, поможет ли это решить проблему.

person Lukas Eklund    schedule 21.11.2014
comment
Спасибо за ответ, Лукас! В какой-то момент я установил тайм-аут на 30, но все равно были проблемы. Я установил тайм-аут на 20 и заменил местоположение на Вашингтон, округ Колумбия. Я думаю, что 20016 не может быть допустимым значением для местоположения. По крайней мере, сейчас он колеблется между использованием request.location и Вашингтоном, округ Колумбия. - person ThinQtv; 22.11.2014
comment
Да, я должен был быть более ясным. Если тайм-аут геокодера установлен на 30, вы все равно будете видеть тайм-ауты H12, потому что общее время запроса превысит 30 секунд. - person Lukas Eklund; 26.11.2014