sunspot_rails 1.3.3 → 2.0.0.pre.111215
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +7 -1
- data/gemfiles/{rails-3.0.12 → rails-3.0.11} +1 -1
- data/gemfiles/{rails-3.1.4 → rails-3.1.3} +1 -1
- data/lib/sunspot/rails/railtie.rb +1 -1
- data/lib/sunspot/rails/searchable.rb +16 -5
- data/lib/sunspot/rails/solr_instrumentation.rb +6 -5
- data/lib/sunspot/rails/stub_session_proxy.rb +1 -5
- data/lib/sunspot/rails/tasks.rb +9 -19
- data/spec/model_spec.rb +6 -0
- data/spec/stub_session_proxy_spec.rb +5 -5
- metadata +24 -30
- data/gemfiles/rails-3.2.3 +0 -12
data/History.txt
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
==
|
1
|
+
== 2.0.0
|
2
|
+
* Finds orphaned objects in batches to avoid excessive memory use (Peer Allan)
|
3
|
+
* Default batch size can be specified by setting `Sunspot.config.indexing.default_batch_size`
|
4
|
+
(Peer Allan)
|
5
|
+
* Explanation of `progress_bar` is written to stdout instead of stderr (Matt Gornick)
|
6
|
+
|
7
|
+
== 1.3.0 2011-11-26
|
2
8
|
* `Model.index` correctly uses `:first_id` option (Hamza Khan-Cheema)
|
3
9
|
* Solr request performance is instrumented in Rails (Paco Guzmán)
|
4
10
|
* Reindexing tasks display a progress bar if `progress_bar` gem is available (Paul Carey)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Sunspot
|
2
2
|
module Rails
|
3
3
|
class Railtie < ::Rails::Railtie
|
4
|
-
initializer 'sunspot_rails.init'
|
4
|
+
initializer 'sunspot_rails.init' do
|
5
5
|
Sunspot.session = Sunspot::Rails.build_session
|
6
6
|
ActiveSupport.on_load(:active_record) do
|
7
7
|
Sunspot::Adapters::InstanceAdapter.register(Sunspot::Rails::Adapters::ActiveRecordInstanceAdapter, ActiveRecord::Base)
|
@@ -238,7 +238,7 @@ module Sunspot #:nodoc:
|
|
238
238
|
#
|
239
239
|
def solr_index(opts={})
|
240
240
|
options = {
|
241
|
-
:batch_size =>
|
241
|
+
:batch_size => Sunspot.config.indexing.default_batch_size,
|
242
242
|
:batch_commit => true,
|
243
243
|
:include => self.sunspot_options[:include],
|
244
244
|
:start => opts.delete(:first_id) || 0
|
@@ -275,13 +275,19 @@ module Sunspot #:nodoc:
|
|
275
275
|
# wrong. Usually you will want to rectify the situation by calling
|
276
276
|
# #clean_index_orphans or #reindex
|
277
277
|
#
|
278
|
+
# ==== Options (passed as a hash)
|
279
|
+
#
|
280
|
+
# batch_size<Integer>:: Batch size with which to load records. Passing
|
281
|
+
# Default is 1000 (from ActiveRecord).
|
282
|
+
#
|
278
283
|
# ==== Returns
|
279
284
|
#
|
280
285
|
# Array:: Collection of IDs that exist in Solr but not in the database
|
281
|
-
def solr_index_orphans
|
286
|
+
def solr_index_orphans(opts={})
|
287
|
+
batch_size = opts[:batch_size] || Sunspot.config.indexing.default_batch_size
|
282
288
|
count = self.count
|
283
289
|
indexed_ids = solr_search_ids { paginate(:page => 1, :per_page => count) }.to_set
|
284
|
-
|
290
|
+
find_each(:select => 'id', :batch_size => batch_size) do |object|
|
285
291
|
indexed_ids.delete(object.id)
|
286
292
|
end
|
287
293
|
indexed_ids.to_a
|
@@ -293,8 +299,13 @@ module Sunspot #:nodoc:
|
|
293
299
|
# circumstances, this should not be necessary; this method is provided
|
294
300
|
# in case something goes wrong.
|
295
301
|
#
|
296
|
-
|
297
|
-
|
302
|
+
# ==== Options (passed as a hash)
|
303
|
+
#
|
304
|
+
# batch_size<Integer>:: Batch size with which to load records
|
305
|
+
# Default is 50
|
306
|
+
#
|
307
|
+
def solr_clean_index_orphans(opts={})
|
308
|
+
solr_index_orphans(opts).each do |id|
|
298
309
|
new do |fake_instance|
|
299
310
|
fake_instance.id = id
|
300
311
|
end.solr_remove_from_index
|
@@ -7,11 +7,12 @@ module Sunspot
|
|
7
7
|
alias_method_chain :execute, :as_instrumentation
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
module InstanceMethods
|
11
|
+
def execute_with_as_instrumentation(path, params={}, *extra)
|
12
|
+
ActiveSupport::Notifications.instrument("request.rsolr",
|
13
|
+
{:path => path, :parameters => params}) do
|
14
|
+
execute_without_as_instrumentation(path, params, *extra)
|
15
|
+
end
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
data/lib/sunspot/rails/tasks.rb
CHANGED
@@ -15,10 +15,6 @@ namespace :sunspot do
|
|
15
15
|
# # batchs of 1000
|
16
16
|
# $ rake sunspot:reindex[,Post+Author] # reindex Post and Author model
|
17
17
|
task :reindex, [:batch_size, :models] => [:environment] do |t, args|
|
18
|
-
|
19
|
-
# Retry once or gracefully fail for a 5xx error so we don't break reindexing
|
20
|
-
Sunspot.session = Sunspot::SessionProxy::Retry5xxSessionProxy.new(Sunspot.session)
|
21
|
-
|
22
18
|
# Set up general options for reindexing
|
23
19
|
reindex_options = { :batch_commit => false }
|
24
20
|
|
@@ -48,26 +44,22 @@ namespace :sunspot do
|
|
48
44
|
total_documents = sunspot_models.map { | m | m.count }.sum
|
49
45
|
reindex_options[:progress_bar] = ProgressBar.new(total_documents)
|
50
46
|
rescue LoadError => e
|
51
|
-
$
|
47
|
+
$stdout.puts "Skipping progress bar: for progress reporting, add gem 'progress_bar' to your Gemfile"
|
52
48
|
rescue Exception => e
|
53
49
|
$stderr.puts "Error using progress bar: #{e.message}"
|
54
50
|
end
|
55
|
-
|
51
|
+
|
56
52
|
# Finally, invoke the class-level solr_reindex on each model
|
57
53
|
sunspot_models.each do |model|
|
58
54
|
model.solr_reindex(reindex_options)
|
59
55
|
end
|
60
56
|
end
|
61
57
|
|
62
|
-
def sunspot_solr_in_load_path?
|
63
|
-
# http://www.rubular.com/r/rJGDh7eOSc
|
64
|
-
$:.any? { |path| path =~ %r{sunspot_solr(-[^/]+)?/lib$} }
|
65
|
-
end
|
66
58
|
|
67
|
-
unless
|
59
|
+
unless defined?(Sunspot::Solr)
|
68
60
|
namespace :solr do
|
69
|
-
|
70
|
-
|
61
|
+
task :moved_to_sunspot_solr do
|
62
|
+
abort %(
|
71
63
|
Note: This task has been moved to the sunspot_solr gem. To install, start and
|
72
64
|
stop a local Solr instance, please add sunspot_solr to your Gemfile:
|
73
65
|
|
@@ -76,19 +68,17 @@ namespace :sunspot do
|
|
76
68
|
end
|
77
69
|
|
78
70
|
)
|
79
|
-
|
80
|
-
|
71
|
+
end
|
72
|
+
|
81
73
|
desc 'Start the Solr instance'
|
82
74
|
task :start => :moved_to_sunspot_solr
|
83
|
-
|
84
75
|
desc 'Run the Solr instance in the foreground'
|
85
76
|
task :run => :moved_to_sunspot_solr
|
86
|
-
|
87
77
|
desc 'Stop the Solr instance'
|
88
78
|
task :stop => :moved_to_sunspot_solr
|
89
|
-
|
90
|
-
# for backwards compatibility
|
79
|
+
# for backwards compatibility
|
91
80
|
task :reindex => :"sunspot:reindex"
|
92
81
|
end
|
93
82
|
end
|
83
|
+
|
94
84
|
end
|
data/spec/model_spec.rb
CHANGED
@@ -211,6 +211,12 @@ describe 'ActiveRecord mixin' do
|
|
211
211
|
it 'should return IDs of objects that are in the index but not the database' do
|
212
212
|
Post.index_orphans.should == [@posts.first.id]
|
213
213
|
end
|
214
|
+
|
215
|
+
it 'should find the orphans in batches to improve performance' do
|
216
|
+
Post.should_receive(:find_each).with(hash_including(:batch_size => 10)).and_return([])
|
217
|
+
Post.index_orphans(:batch_size => 10)
|
218
|
+
end
|
219
|
+
|
214
220
|
end
|
215
221
|
|
216
222
|
describe 'clean_index_orphans()' do
|
@@ -79,6 +79,11 @@ describe 'specs with Sunspot stubbed' do
|
|
79
79
|
Post.search
|
80
80
|
end
|
81
81
|
|
82
|
+
it 'should not execute a search when #search called' do
|
83
|
+
@session.should_not_receive(:search)
|
84
|
+
Post.search
|
85
|
+
end
|
86
|
+
|
82
87
|
it 'should not execute a search when #search called with parameters' do
|
83
88
|
@session.should_not_receive(:search)
|
84
89
|
Post.search(:include => :blog, :select => 'id, title')
|
@@ -89,11 +94,6 @@ describe 'specs with Sunspot stubbed' do
|
|
89
94
|
Sunspot.new_search(Post).should respond_to(:execute)
|
90
95
|
end
|
91
96
|
|
92
|
-
it 'should not send more_like_this to session' do
|
93
|
-
@session.should_not_receive(:more_like_this)
|
94
|
-
Sunspot.more_like_this(@post)
|
95
|
-
end
|
96
|
-
|
97
97
|
describe 'stub search' do
|
98
98
|
before :each do
|
99
99
|
@search = Post.search
|
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sunspot_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: true
|
6
5
|
segments:
|
7
|
-
-
|
8
|
-
-
|
9
|
-
-
|
10
|
-
|
6
|
+
- 2
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- pre
|
10
|
+
- 111215
|
11
|
+
version: 2.0.0.pre.111215
|
11
12
|
platform: ruby
|
12
13
|
authors:
|
13
14
|
- Mat Brown
|
@@ -33,33 +34,32 @@ autorequire:
|
|
33
34
|
bindir: bin
|
34
35
|
cert_chain: []
|
35
36
|
|
36
|
-
date:
|
37
|
+
date: 2011-12-15 00:00:00 -07:00
|
38
|
+
default_executable:
|
37
39
|
dependencies:
|
38
40
|
- !ruby/object:Gem::Dependency
|
39
41
|
name: sunspot
|
40
42
|
prerelease: false
|
41
43
|
requirement: &id001 !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
44
|
requirements:
|
44
45
|
- - "="
|
45
46
|
- !ruby/object:Gem::Version
|
46
|
-
hash: 29
|
47
47
|
segments:
|
48
|
-
-
|
49
|
-
-
|
50
|
-
-
|
51
|
-
|
48
|
+
- 2
|
49
|
+
- 0
|
50
|
+
- 0
|
51
|
+
- pre
|
52
|
+
- 111215
|
53
|
+
version: 2.0.0.pre.111215
|
52
54
|
type: :runtime
|
53
55
|
version_requirements: *id001
|
54
56
|
- !ruby/object:Gem::Dependency
|
55
57
|
name: nokogiri
|
56
58
|
prerelease: false
|
57
59
|
requirement: &id002 !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
60
|
requirements:
|
60
61
|
- - ">="
|
61
62
|
- !ruby/object:Gem::Version
|
62
|
-
hash: 3
|
63
63
|
segments:
|
64
64
|
- 0
|
65
65
|
version: "0"
|
@@ -69,11 +69,9 @@ dependencies:
|
|
69
69
|
name: rspec
|
70
70
|
prerelease: false
|
71
71
|
requirement: &id003 !ruby/object:Gem::Requirement
|
72
|
-
none: false
|
73
72
|
requirements:
|
74
73
|
- - ~>
|
75
74
|
- !ruby/object:Gem::Version
|
76
|
-
hash: 11
|
77
75
|
segments:
|
78
76
|
- 1
|
79
77
|
- 2
|
@@ -84,11 +82,9 @@ dependencies:
|
|
84
82
|
name: rspec-rails
|
85
83
|
prerelease: false
|
86
84
|
requirement: &id004 !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
85
|
requirements:
|
89
86
|
- - ~>
|
90
87
|
- !ruby/object:Gem::Version
|
91
|
-
hash: 11
|
92
88
|
segments:
|
93
89
|
- 1
|
94
90
|
- 2
|
@@ -118,9 +114,8 @@ files:
|
|
118
114
|
- dev_tasks/spec.rake
|
119
115
|
- dev_tasks/todo.rake
|
120
116
|
- gemfiles/rails-2.3.14
|
121
|
-
- gemfiles/rails-3.0.
|
122
|
-
- gemfiles/rails-3.1.
|
123
|
-
- gemfiles/rails-3.2.3
|
117
|
+
- gemfiles/rails-3.0.11
|
118
|
+
- gemfiles/rails-3.1.3
|
124
119
|
- generators/sunspot/sunspot_generator.rb
|
125
120
|
- generators/sunspot/templates/sunspot.yml
|
126
121
|
- install.rb
|
@@ -171,6 +166,7 @@ files:
|
|
171
166
|
- spec/stub_session_proxy_spec.rb
|
172
167
|
- sunspot_rails.gemspec
|
173
168
|
- tmp/.gitkeep
|
169
|
+
has_rdoc: true
|
174
170
|
homepage: http://github.com/outoftime/sunspot/tree/master/sunspot_rails
|
175
171
|
licenses: []
|
176
172
|
|
@@ -184,27 +180,25 @@ rdoc_options:
|
|
184
180
|
require_paths:
|
185
181
|
- lib
|
186
182
|
required_ruby_version: !ruby/object:Gem::Requirement
|
187
|
-
none: false
|
188
183
|
requirements:
|
189
184
|
- - ">="
|
190
185
|
- !ruby/object:Gem::Version
|
191
|
-
hash: 3
|
192
186
|
segments:
|
193
187
|
- 0
|
194
188
|
version: "0"
|
195
189
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
|
-
none: false
|
197
190
|
requirements:
|
198
|
-
- - "
|
191
|
+
- - ">"
|
199
192
|
- !ruby/object:Gem::Version
|
200
|
-
hash: 3
|
201
193
|
segments:
|
202
|
-
-
|
203
|
-
|
194
|
+
- 1
|
195
|
+
- 3
|
196
|
+
- 1
|
197
|
+
version: 1.3.1
|
204
198
|
requirements: []
|
205
199
|
|
206
200
|
rubyforge_project: sunspot
|
207
|
-
rubygems_version: 1.
|
201
|
+
rubygems_version: 1.3.6
|
208
202
|
signing_key:
|
209
203
|
specification_version: 3
|
210
204
|
summary: Rails integration for the Sunspot Solr search library
|
data/gemfiles/rails-3.2.3
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
source :rubygems
|
2
|
-
|
3
|
-
gem 'rails', '3.2.3'
|
4
|
-
gem 'sqlite3-ruby', '~> 1.3.1'
|
5
|
-
|
6
|
-
gem 'sunspot', :path => File.expand_path('../../../sunspot', __FILE__)
|
7
|
-
gem 'sunspot_solr', :path => File.expand_path('../../../sunspot_solr', __FILE__)
|
8
|
-
gem 'sunspot_rails', :path => File.expand_path('../..', __FILE__)
|
9
|
-
|
10
|
-
group :test do
|
11
|
-
gem 'rspec-rails', '~> 2.8.1'
|
12
|
-
end
|