Commit 25900c760b08519d1b23f0965efe67a5c6fab54a
1 parent
d3c5df9d
Exists in
master
and in
21 other branches
add the ability to reindex all models in one rake command
Showing
2 changed files
with
26 additions
and
4 deletions
Show diff stats
README.md
... | ... | @@ -398,8 +398,15 @@ Product.search "milk", load: false |
398 | 398 | |
399 | 399 | 3. Deploy and reindex |
400 | 400 | |
401 | + You can reindex a particular class: | |
402 | + | |
403 | + ```ruby | |
404 | + rake searchkick:reindex:class[Product] # or Product.reindex in the console | |
405 | + ``` | |
406 | + | |
407 | + Or you can reindex all models at the same time: | |
401 | 408 | ```ruby |
402 | - rake searchkick:reindex CLASS=Product # or Product.reindex in the console | |
409 | + rake searchkick:reindex:all | |
403 | 410 | ``` |
404 | 411 | |
405 | 412 | 4. Once it finishes, replace search calls w/ searchkick calls | ... | ... |
lib/searchkick/tasks.rb
... | ... | @@ -2,8 +2,23 @@ require "rake" |
2 | 2 | |
3 | 3 | namespace :searchkick do |
4 | 4 | desc "re-index elasticsearch" |
5 | - task :reindex => :environment do | |
6 | - klass = ENV["CLASS"].constantize | |
7 | - klass.reindex | |
5 | + namespace :reindex do | |
6 | + desc "reindex a Model by passing it as an argument" | |
7 | + task :class, [:klass] => [:environment] do |t, args| | |
8 | + begin | |
9 | + args[:klass].constantize.reindex | |
10 | + rescue | |
11 | + puts "#{args[:klass]} model not found" | |
12 | + end | |
13 | + end | |
14 | + | |
15 | + desc "reindex all models" | |
16 | + task :all => [:environment] do | |
17 | + Dir[Rails.root + "app/models/**/*.rb"].each { |path| require path } | |
18 | + models = ActiveRecord::Base.descendants.map(&:name) | |
19 | + models.each do |model| | |
20 | + model.constantize.reindex if model.respond_to?(:search) | |
21 | + end | |
22 | + end | |
8 | 23 | end |
9 | 24 | end | ... | ... |