使用DelayedJob run_at阻止地理编码请求

时间:2013-03-27 21:44:34

标签: ruby-on-rails ruby delayed-job rails-geocoder

我正试图在我的Rails应用程序中处理地理编码,以便我可以使用DelayedJob限制地理编码api调用的流程。

我的目的只是排队地理编码请求,因为它们对用户没有时间敏感性。此外,我使用的免费地理编码API(Nominatim)每秒只需要一个请求。

我有geocoder gem设置,在我的用户模型中,我从用户帐户设置中获取邮政编码(它不能为空,我已经在验证它了。)

我的想法是使用run_at开始限制调用,但是run_at的初始测试显示正在排队的作业,但地理编码在完成时没有保存值。

after_validation :run_geocode, :if => :postcode_changed?

def run_geocode
   self.delay(:run_at => 30.seconds.from_now).geocode
end

我错过了一些非常明显的东西吗?我不能只训练文档所说的地理编码方法。

1 个答案:

答案 0 :(得分:1)

如果您未在任何地方调用保存,则可能无法保存地理编码响应。此外,通常在保存/更新/删除记录后而不是在验证之后运行回调。

after_save :run_geocode, :if => :postcode_changed?

def run_geocode
  self.delay.geocode! # delayed_job will process geocode! at a later point in time
end

def geocode!
  # do whatever is nescessary to receive geocoded infos
  # assign the results
  # save the record to save the updates
  self.save
end