在地理编码器rails gem中的request.location对于heroku来说太慢了吗?

时间:2014-11-21 18:49:07

标签: ruby-on-rails heroku rails-geocoder

在过去的一周里,我注意到在我使用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的默认邮政编码,但我仍然收到应用程序错误。

还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

如果为Geocoder gem设置超时,则需要将其设置为少于30秒,这是对Heroku的每个请求所需的时间。当超时设置为40秒时,对地理定位服务的地理编码器请求将在40秒后超时 - 但是在Heroku已经超时请求时,您会看到H12应用程序错误。将超时设置为小于30秒的时间,您至少应该看到默认的邮政编码。

Geocoder request.location方法将尝试使用默认IP地理编码服务FreeGeoIP对请求IP地址进行地理编码。他们似乎最近遇到了一些问题(2015年11月)。您可以尝试使用其他IP服务(如Telize)来查看是否有助于解决此问题。