Rails 3.1 Геокодирование не работает на Heroku - PullRequest
1 голос
/ 14 ноября 2011

У меня есть модель катка с этим кодом:

geocoded_by :full_street_address
after_validation :geocode

...

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

А потом в db / seed.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 неправильно геокодируются и имеют нулевые значения широты и долготы. Многократный запуск команды db: seed в Heroku изменяет набор объектов Rink, которые не были правильно геокодированы. Есть мысли?

1 Ответ

2 голосов
/ 21 февраля 2012

Я бы поместил почасовой крон в ваше приложение (или ежедневный крон) примерно так:

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

Вероятно, происходит то, что ваше приложение использует тот же IP-адрес, что и другие приложения Heroku, для выполнения запроса API геокодера, а API по умолчанию (google) ограничивает скорость на основе IP-адреса до 2500 запросов в день.

Если вы зарегистрируетесь для получения ключа API, вы сможете отправлять запросы (в течение 2500 дней) и иметь свой СВОЙ лимит, не передаваемый другим приложениям.

...