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