From 64c4e6cde5ad67d7b895f0cdf838e22f10c2e9a7 Mon Sep 17 00:00:00 2001
From: fishbullet <shindu666@gmail.com>
Date: Sun, 13 Apr 2014 13:37:34 +0400
Subject: [PATCH] batch size in rake task for large database

---
 lib/tasks/geocoder.rake     |  4 +++-
 test/unit/rake_task_test.rb | 21 +++++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 test/unit/rake_task_test.rb

diff --git a/lib/tasks/geocoder.rake b/lib/tasks/geocoder.rake
index 9bb15c5b..2b6039af 100644
--- a/lib/tasks/geocoder.rake
+++ b/lib/tasks/geocoder.rake
@@ -3,10 +3,12 @@ namespace :geocode do
   task :all => :environment do
     class_name = ENV['CLASS'] || ENV['class']
     sleep_timer = ENV['SLEEP'] || ENV['sleep']
+    batch = ENV['BATCH'] || ENV['batch']
     raise "Please specify a CLASS (model)" unless class_name
     klass = class_from_string(class_name)
+    batch = batch.to_i unless batch.nil?
 
-    klass.not_geocoded.each do |obj|
+    klass.not_geocoded.find_each(batch_size: batch) do |obj|
       obj.geocode; obj.save
       sleep(sleep_timer.to_f) unless sleep_timer.nil?
     end
diff --git a/test/unit/rake_task_test.rb b/test/unit/rake_task_test.rb
new file mode 100644
index 00000000..ca832298
--- /dev/null
+++ b/test/unit/rake_task_test.rb
@@ -0,0 +1,21 @@
+# encoding: utf-8
+$: << File.join(File.dirname(__FILE__), "..")
+require 'test_helper'
+
+class RakeTaskTest < GeocoderTestCase
+  def setup
+    Rake.application.rake_require "tasks/geocoder"
+    Rake::Task.define_task(:environment)
+  end
+
+  def test_rake_task_geocode_raise_specify_class_message
+    assert_raise(RuntimeError, "Please specify a CLASS (model)") do
+      Rake.application.invoke_task("geocode:all")
+    end
+  end
+
+  def test_rake_task_geocode_specify_class
+    ENV['CLASS'] = 'Place'
+    assert_nil Rake.application.invoke_task("geocode:all")
+  end
+end
-- 
GitLab