【问题标题】:Geocoder ruby gem on demand?按需地理编码器红宝石宝石?
【发布时间】:2014-04-11 12:20:43
【问题描述】:

我有一个包含 4 多万个地址/记录的大型数据库。 当数据库是一个小型测试集时,rake 命令(如下)运行良好,但现在对于大型数据库它只是简单地停止。

rake geocode:all CLASS=YourModel

2 个问题: 1. 在调用记录时(即时),是否有任何简单的方法可以使地理编码器编码为空/零纬度和经度。我有一种感觉,这将很难。 2. 其他人在对大型数据集进行地理编码和使用 rake 命令时遇到问题?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby google-maps geocoding


    【解决方案1】:

    更新:

    我根据这个答案创建了拉取请求,现在您可以在geocoder 中使用批处理:

    rake geocode:all CLASS=YourModel SLEEP=0.25 BATCH=100
    

    我会将此解决方案用于大型数据库,我从geocoder gem rake 任务中获取它: 您可以根据自己的需要对此进行细化。 一些例子创建rake task:

    namespace :geocode_my_data do
      desc "Geocode all objects in my databse."
      task all: :environment do
      klass = User
        klass.where(geocoded: false).find_each(limit: 100) do |obj|
          obj.geocode; obj.save
        end
      end
    end
    
    $> rake geocode_my_data:all
    

    【讨论】:

    • sleep 是干什么用的?
    • 谢谢。我认为限制将防止我一直冻结。
    【解决方案2】:

    使用下面的代码并将其作为 geocode_my_data.rake 放入我的 lib/tasks 文件夹 运行:

    rake geocode:all CLASS=YourModel
    

    效果很好!

    namespace :geocode_my_data do
      desc "Geocode all objects without coordinates."
      task :all => :environment do
        class_name = ENV['CLASS'] || ENV['class']
        sleep_timer = ENV['SLEEP'] || ENV['sleep']
        raise "Please specify a CLASS (model)" unless class_name
        klass = class_from_string(class_name)
    
    klass.not_geocoded.find_each(batch_size: 100) do |obj|
          obj.geocode; obj.save
          sleep(sleep_timer.to_f) unless sleep_timer.nil?
        end
      end
    end
    
    ##
    # Get a class object from the string given in the shell environment.
    # Similar to ActiveSupport's +constantize+ method.
    #
    def class_from_string(class_name)
      parts = class_name.split("::")
      constant = Object
      parts.each do |part|
        constant = constant.const_get(part)
      end
      constant
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-18
      • 2010-12-14
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      相关资源
      最近更新 更多