在过去的一周里,我注意到在我使用Geocoder gem来请求.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
)
到我的config / 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')
当request.location超时时,期望获得20016的默认邮政编码,但我仍然收到应用程序错误。
还有其他建议吗?
答案 0 :(得分:1)
如果为Geocoder gem设置超时,则需要将其设置为少于30秒,这是对Heroku的每个请求所需的时间。当超时设置为40秒时,对地理定位服务的地理编码器请求将在40秒后超时 - 但是在Heroku已经超时请求时,您会看到H12应用程序错误。将超时设置为小于30秒的时间,您至少应该看到默认的邮政编码。
Geocoder request.location
方法将尝试使用默认IP地理编码服务FreeGeoIP对请求IP地址进行地理编码。他们似乎最近遇到了一些问题(2015年11月)。您可以尝试使用其他IP服务(如Telize)来查看是否有助于解决此问题。