1

我有一个带有此代码的溜冰场模型:

geocoded_by :full_street_address
after_validation :geocode

...

def full_street_address
  [address, city, 'Ontario', 'Canada'].compact.join(', ')
end

然后在 db/seeds.rb 我有这种格式的东西:

Rink.create([
{
  name: 'Alexander Park',
  address: '259 Whitney Ave.',
  city: 'Hamilton',
  rink_type: 'outdoor',
  phone: '9055463747'
}, .... ])

当我在本地机器上运行 rake db:seed 时,所有 Rink 对象都被创建并正确地进行了地理编码。但是当我推送到 Heroku 并运行相同的命令 (heroku run rake db:seed) 时,Rink 对象的一些看似随机的子集没有正确地进行地理编码,并且纬度和经度的值为空。在 Heroku 上多次运行 db:seed 命令会更改未正确地理编码的 Rink 对象集。有什么想法吗?

4

1 回答 1

2

我会在您的应用程序(或每日 cron)中放置一个每小时的 cron,如下所示:

Rink.not_geocoded.find_each do |rink|
  rink.geocode
end

可能发生的情况是您的应用程序使用与其他 Heroku 应用程序相同的 IP 地址来发出 Geocoder API 请求,并且默认 API (google) 是基于 IP 地址的速率限制为每天 2500 个请求。

如果您注册了一个 API 密钥,那么您应该能够提出您的请求(在 2500 个/天之内)并拥有您的 OWN 限制,而不是与其他应用程序共享。

于 2012-02-21T02:09:03.447 回答