2014-11-21 1 views
0

За прошедшую неделю, я заметил, что на страницах, где я использую камень геокодировании request.location, мой Heroku приложение часто отображаетЯвляется ли request.location в geocoder rails gem слишком медленным для героику?

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 
) 

моей конфигурации/инициализаторах/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, но я все еще получаю ошибку приложения.

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

ответ

1

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

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

+0

Спасибо за ваш ответ, Лукас! В какой-то момент у меня установлен тайм-аут до 30, но у меня все еще были проблемы. Я установил тайм-аут на 20 и заменил место на «Вашингтон, округ Колумбия». Я думаю, что 20016, возможно, не было допустимым значением для местоположения. По крайней мере сейчас это колеблется между использованием request.location и «Вашингтон, округ Колумбия». – CrowdPublishTV

+0

Да, я должен был быть более ясным. Если тайм-аут геокодера установлен в 30, вы все равно увидите таймауты H12, потому что общее время запроса будет больше 30 секунд. –