sunspot_rails 0.11.5 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +12 -0
- data/README.rdoc +12 -18
- data/TODO +1 -1
- data/VERSION.yml +4 -0
- data/dev_tasks/gemspec.rake +13 -14
- data/lib/sunspot/rails/adapters.rb +2 -2
- data/lib/sunspot/rails/searchable.rb +49 -21
- data/lib/sunspot/rails/server.rb +143 -220
- data/lib/sunspot/rails/solr_logging.rb +54 -0
- data/lib/sunspot/rails/spec_helper.rb +19 -0
- data/lib/sunspot/rails/stub_session_proxy.rb +83 -0
- data/lib/sunspot/rails/tasks.rb +15 -13
- data/lib/sunspot/rails/version.rb +1 -1
- data/lib/sunspot/rails.rb +42 -6
- data/rails/init.rb +1 -1
- data/spec/mock_app/app/models/photo_post.rb +2 -0
- data/spec/mock_app/db/schema.rb +1 -0
- data/spec/mock_app/db/test.db +0 -1
- data/spec/model_lifecycle_spec.rb +14 -4
- data/spec/model_spec.rb +24 -4
- data/spec/schema.rb +1 -0
- data/spec/server_spec.rb +21 -109
- data/spec/spec_helper.rb +2 -6
- data/spec/stub_session_proxy_spec.rb +117 -0
- metadata +52 -51
- data/lib/sunspot/rails/session_proxy.rb +0 -76
- data/lib/sunspot/rails/util.rb +0 -30
- data/lib/sunspot/spec/extension.rb +0 -45
- data/spec/mock_app/app/models/photo_post_with_auto.rb +0 -2
- data/spec/sunspot_mocking_spec.rb +0 -22
- data/spec/util_spec.rb +0 -21
data/History.txt
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
== 1.0.0
|
2
|
+
* Sunspot::Rails::Server subclasses Sunspot::Server; no longer needs to shell out
|
3
|
+
* Use Sunspot built-in session proxies in Sunspot::Rails
|
4
|
+
* Sunspot::Rails adapter compatible with assumed inconsistency
|
5
|
+
* Use session proxy for disconnecting Sunspot in specs
|
6
|
+
* Allow specification of first ID for reindex batches.
|
7
|
+
* Log Solr requests in Rails logger
|
8
|
+
* Use class_inheritable_hash for sunspot_options
|
9
|
+
* Add `index` class method, which is like `reindex` but doesn't clear first
|
10
|
+
* Rename sunspot:solr:reindex to sunspot:reindex
|
11
|
+
* Use Sunspot::Installer to bootstrap Rails Solr home
|
12
|
+
|
1
13
|
== 0.10.7
|
2
14
|
* Added Sunspot::Rails::Server class to start/stop/run/bootstrap the solr server
|
3
15
|
* Added log_level key to sunspot.yml, see java docs for valid values (http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/Level.html)
|
data/README.rdoc
CHANGED
@@ -206,31 +206,24 @@ used as intended.
|
|
206
206
|
|
207
207
|
== Testing Solr integration using RSpec
|
208
208
|
|
209
|
-
To disable the sunspot-solr integration for your active record models,
|
210
|
-
|
209
|
+
To disable the sunspot-solr integration for your active record models, require
|
210
|
+
the file `sunspot/rails/spec_helper`
|
211
211
|
|
212
|
-
|
212
|
+
Then, in your spec, use the #disconnect_sunspot method:
|
213
213
|
|
214
|
-
|
215
|
-
via the #searchable method. This will not disable/mock explicit calls in your code.
|
214
|
+
require 'sunspot/rails/spec_helper'
|
216
215
|
|
217
|
-
|
218
|
-
|
219
|
-
examples.
|
220
|
-
|
221
|
-
describe Searches do
|
222
|
-
integrate_sunspot
|
223
|
-
|
224
|
-
before(:each) do
|
225
|
-
@movie = Factory.create :movie
|
226
|
-
end
|
216
|
+
describe Post do
|
217
|
+
disconnect_sunspot
|
227
218
|
|
228
|
-
it
|
229
|
-
|
219
|
+
it 'should have some behavior'
|
220
|
+
# ...
|
230
221
|
end
|
231
222
|
end
|
232
223
|
|
233
|
-
|
224
|
+
In all of the examples in this group, all Sunspot calls will be stubbed out. The
|
225
|
+
Sunspot#search method will return a stub search object that mimics a search with
|
226
|
+
no results.
|
234
227
|
|
235
228
|
== Further Reading
|
236
229
|
|
@@ -254,6 +247,7 @@ http://outoftime.lighthouseapp.com/projects/20339-sunspot
|
|
254
247
|
- Benjamin Krause (bk@benjaminkrause.com)
|
255
248
|
- Adam Salter (adam@codebright.net)
|
256
249
|
- Brandon Keepers (brandon@opensoul.org)
|
250
|
+
- Paul Canavese (paul@canavese.org)
|
257
251
|
|
258
252
|
== License
|
259
253
|
|
data/TODO
CHANGED
data/VERSION.yml
ADDED
data/dev_tasks/gemspec.rake
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', '..', '
|
2
|
-
require File.join(File.dirname(__FILE__), '..', 'lib', 'sunspot', 'rails', 'version')
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'tools', 'gem_tasks')
|
3
2
|
|
4
3
|
Sunspot::GemTasks.new do |s|
|
4
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'sunspot', 'rails', 'version')
|
5
|
+
|
5
6
|
s.name = 'sunspot_rails'
|
6
7
|
s.version = Sunspot::Rails::VERSION
|
7
8
|
s.summary = 'Rails integration for the Sunspot Solr search library'
|
@@ -15,21 +16,19 @@ running a Sunspot-compatible Solr instance for development and test
|
|
15
16
|
environments, and automatically commit Solr index changes at the end of each
|
16
17
|
Rails request.
|
17
18
|
TEXT
|
18
|
-
s.authors = ['Mat Brown', 'Peer Allan', 'Michael Moen', 'Benjamin Krause']
|
19
|
+
s.authors = ['Mat Brown', 'Peer Allan', 'Michael Moen', 'Benjamin Krause', 'Adam Salter', 'Brandon Keepers', 'Paul Canavese']
|
19
20
|
s.rubyforge_project = 'sunspot'
|
20
21
|
s.files = FileList['[A-Z]*',
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
22
|
+
'{lib,tasks,dev_tasks}/**/*',
|
23
|
+
'generators/**/*',
|
24
|
+
'install.rb',
|
25
|
+
'MIT-LICENSE',
|
26
|
+
'rails/*',
|
27
|
+
'spec/*.rb',
|
28
|
+
'spec/mock_app/{app,lib,db,vendor,config}/**/*',
|
29
|
+
'spec/mock_app/{tmp,log,solr}']
|
29
30
|
s.add_dependency 'escape', '>= 0.0.4'
|
30
|
-
s.add_dependency 'sunspot',
|
31
|
+
s.add_dependency 'sunspot', Sunspot::Rails::VERSION
|
31
32
|
s.add_development_dependency 'rspec', '~> 1.2'
|
32
33
|
s.add_development_dependency 'rspec-rails', '~> 1.2'
|
33
|
-
s.add_development_dependency 'ruby-debug', '~> 0.10'
|
34
|
-
s.add_development_dependency 'technicalpickles-jeweler', '~> 1.0'
|
35
34
|
end
|
@@ -47,7 +47,7 @@ module Sunspot #:nodoc:
|
|
47
47
|
# ActiveRecord::Base:: ActiveRecord model
|
48
48
|
#
|
49
49
|
def load(id)
|
50
|
-
@clazz.
|
50
|
+
@clazz.find_by_id(id.to_i, options_for_find)
|
51
51
|
end
|
52
52
|
|
53
53
|
#
|
@@ -62,7 +62,7 @@ module Sunspot #:nodoc:
|
|
62
62
|
# Array:: Collection of ActiveRecord models
|
63
63
|
#
|
64
64
|
def load_all(ids)
|
65
|
-
@clazz.
|
65
|
+
@clazz.find_all_by_id(ids.map { |id| id.to_i }, options_for_find)
|
66
66
|
end
|
67
67
|
|
68
68
|
private
|
@@ -36,7 +36,7 @@ module Sunspot #:nodoc:
|
|
36
36
|
# </b>(see the README).
|
37
37
|
# :ignore_attribute_changes_of<Array>::
|
38
38
|
# Define attributes, that should not trigger a reindex of that
|
39
|
-
# object. Usual suspects are
|
39
|
+
# object. Usual suspects are updated_at or counters.
|
40
40
|
#
|
41
41
|
# ==== Example
|
42
42
|
#
|
@@ -57,13 +57,12 @@ module Sunspot #:nodoc:
|
|
57
57
|
unless searchable?
|
58
58
|
extend ClassMethods
|
59
59
|
include InstanceMethods
|
60
|
-
|
61
|
-
|
60
|
+
|
61
|
+
class_inheritable_hash :sunspot_options
|
62
62
|
|
63
63
|
unless options[:auto_index] == false
|
64
|
-
|
65
|
-
|
66
|
-
end
|
64
|
+
before_save :maybe_mark_for_auto_indexing
|
65
|
+
after_save :maybe_auto_index
|
67
66
|
end
|
68
67
|
|
69
68
|
unless options[:auto_remove] == false
|
@@ -72,6 +71,7 @@ module Sunspot #:nodoc:
|
|
72
71
|
end
|
73
72
|
end
|
74
73
|
end
|
74
|
+
self.sunspot_options = options
|
75
75
|
end
|
76
76
|
|
77
77
|
#
|
@@ -137,17 +137,24 @@ module Sunspot #:nodoc:
|
|
137
137
|
# Remove all instances of this class from the Solr index and immediately
|
138
138
|
# commit.
|
139
139
|
#
|
140
|
-
#---
|
141
|
-
# XXX Sunspot should implement remove_all!()
|
142
140
|
#
|
143
141
|
def remove_all_from_index!
|
144
|
-
|
145
|
-
Sunspot.commit
|
142
|
+
Sunspot.remove_all!(self)
|
146
143
|
end
|
147
144
|
|
148
145
|
#
|
149
146
|
# Completely rebuild the index for this class. First removes all
|
150
|
-
# instances from the index, then loads records and
|
147
|
+
# instances from the index, then loads records and indexes them.
|
148
|
+
#
|
149
|
+
# See #index for information on options, etc.
|
150
|
+
#
|
151
|
+
def reindex(options = {})
|
152
|
+
remove_all_from_index
|
153
|
+
index(options)
|
154
|
+
end
|
155
|
+
|
156
|
+
#
|
157
|
+
# Add/update all existing records in the Solr index. The
|
151
158
|
# +batch_size+ argument specifies how many records to load out of the
|
152
159
|
# database at a time. The default batch size is 500; if nil is passed,
|
153
160
|
# records will not be indexed in batches. By default, a commit is issued
|
@@ -166,31 +173,33 @@ module Sunspot #:nodoc:
|
|
166
173
|
# used for including associated objects that need to be
|
167
174
|
# indexed with the parent object, accepts all formats
|
168
175
|
# ActiveRecord::Base.find does
|
176
|
+
# first_id:: The lowest possible ID for this class. Defaults to 0, which
|
177
|
+
# is fine for integer IDs; string primary keys will need to
|
178
|
+
# specify something reasonable here.
|
169
179
|
#
|
170
180
|
# ==== Examples
|
171
181
|
#
|
172
|
-
# #
|
173
|
-
# Post.
|
182
|
+
# # index in batches of 500, commit after each
|
183
|
+
# Post.index
|
174
184
|
#
|
175
185
|
# # index all rows at once, then commit
|
176
|
-
# Post.
|
186
|
+
# Post.index(:batch_size => nil)
|
177
187
|
#
|
178
|
-
# #
|
179
|
-
# Post.
|
188
|
+
# # index in batches of 500, commit when all batches complete
|
189
|
+
# Post.index(:batch_commit => false)
|
180
190
|
#
|
181
191
|
# # include the associated +author+ object when loading to index
|
182
|
-
# Post.
|
192
|
+
# Post.index(:include => :author)
|
183
193
|
#
|
184
|
-
def
|
185
|
-
options = { :batch_size => 500, :batch_commit => true, :include => []}.merge(opts)
|
186
|
-
remove_all_from_index
|
194
|
+
def index(opts={})
|
195
|
+
options = { :batch_size => 500, :batch_commit => true, :include => [], :first_id => 0}.merge(opts)
|
187
196
|
unless options[:batch_size]
|
188
197
|
Sunspot.index!(all(:include => options[:include]))
|
189
198
|
else
|
190
199
|
offset = 0
|
191
200
|
counter = 1
|
192
201
|
record_count = count
|
193
|
-
last_id =
|
202
|
+
last_id = options[:first_id]
|
194
203
|
while(offset < record_count)
|
195
204
|
benchmark options[:batch_size], counter do
|
196
205
|
records = all(:include => options[:include], :conditions => ["#{table_name}.#{primary_key} > ?", last_id], :limit => options[:batch_size], :order => primary_key)
|
@@ -303,6 +312,25 @@ module Sunspot #:nodoc:
|
|
303
312
|
def remove_from_index!
|
304
313
|
Sunspot.remove!(self)
|
305
314
|
end
|
315
|
+
|
316
|
+
private
|
317
|
+
|
318
|
+
def maybe_mark_for_auto_indexing
|
319
|
+
@marked_for_auto_indexing =
|
320
|
+
if !new_record? && ignore_attributes = self.class.sunspot_options[:ignore_attribute_changes_of]
|
321
|
+
@marked_for_auto_indexing = !(changed.map { |attr| attr.to_sym } - ignore_attributes).blank?
|
322
|
+
else
|
323
|
+
true
|
324
|
+
end
|
325
|
+
true
|
326
|
+
end
|
327
|
+
|
328
|
+
def maybe_auto_index
|
329
|
+
if @marked_for_auto_indexing
|
330
|
+
index
|
331
|
+
remove_instance_variable(:@marked_for_auto_indexing)
|
332
|
+
end
|
333
|
+
end
|
306
334
|
end
|
307
335
|
end
|
308
336
|
end
|
data/lib/sunspot/rails/server.rb
CHANGED
@@ -1,229 +1,152 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
class Server
|
8
|
-
|
9
|
-
class << self
|
10
|
-
delegate :log_file, :log_level, :port, :solr_home, :to => :configuration
|
11
|
-
|
12
|
-
# Name of the sunspot executable (shell script)
|
13
|
-
SUNSPOT_EXECUTABLE = (RUBY_PLATFORM =~ /w(in)?32$/ ? 'sunspot-solr.bat' : 'sunspot-solr')
|
14
|
-
|
15
|
-
#
|
16
|
-
# Start the sunspot-solr server. Bootstrap solr_home first,
|
17
|
-
# if neccessary.
|
18
|
-
#
|
19
|
-
# ==== Returns
|
20
|
-
#
|
21
|
-
# Boolean:: success
|
22
|
-
#
|
23
|
-
def start
|
24
|
-
bootstrap if bootstrap_neccessary?
|
25
|
-
execute( start_command )
|
26
|
-
end
|
27
|
-
|
28
|
-
#
|
29
|
-
# Run the sunspot-solr server in the foreground. Boostrap
|
30
|
-
# solr_home first, if neccessary.
|
31
|
-
#
|
32
|
-
# ==== Returns
|
33
|
-
#
|
34
|
-
# Boolean:: success
|
35
|
-
#
|
36
|
-
def run
|
37
|
-
bootstrap if bootstrap_neccessary?
|
38
|
-
execute( run_command )
|
39
|
-
end
|
40
|
-
|
41
|
-
#
|
42
|
-
# Stop the sunspot-solr server.
|
43
|
-
#
|
44
|
-
# ==== Returns
|
45
|
-
#
|
46
|
-
# Boolean:: success
|
47
|
-
#
|
48
|
-
def stop
|
49
|
-
execute( stop_command )
|
50
|
-
end
|
51
|
-
|
52
|
-
#
|
53
|
-
# Directory to store solr config files
|
54
|
-
#
|
55
|
-
# ==== Returns
|
56
|
-
#
|
57
|
-
# String:: config_path
|
58
|
-
#
|
59
|
-
def config_path
|
60
|
-
File.join( solr_home, 'conf' )
|
61
|
-
end
|
62
|
-
|
63
|
-
#
|
64
|
-
# Directory to store lucene index data files
|
65
|
-
#
|
66
|
-
# ==== Returns
|
67
|
-
#
|
68
|
-
# String:: data_path
|
69
|
-
#
|
70
|
-
def data_path
|
71
|
-
File.join( solr_home, 'data', ::Rails.env )
|
72
|
-
end
|
1
|
+
module Sunspot
|
2
|
+
module Rails
|
3
|
+
class Server < Sunspot::Server
|
4
|
+
# ActiveSupport log levels are integers; this array maps them to the
|
5
|
+
# appropriate java.util.logging.Level constant
|
6
|
+
LOG_LEVELS = %w(FINE INFO WARNING SEVERE SEVERE INFO)
|
73
7
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
#
|
79
|
-
# String:: lib_path
|
80
|
-
#
|
81
|
-
def lib_path
|
82
|
-
File.join( solr_home, 'lib' )
|
83
|
-
end
|
84
|
-
|
85
|
-
#
|
86
|
-
# Directory to store pid files
|
87
|
-
#
|
88
|
-
# ==== Returns
|
89
|
-
#
|
90
|
-
# String:: pid_path
|
91
|
-
#
|
92
|
-
def pid_path
|
93
|
-
File.join( solr_home, 'pids', ::Rails.env )
|
94
|
-
end
|
95
|
-
|
96
|
-
#
|
97
|
-
# Bootstrap a new solr_home by creating all required
|
98
|
-
# directories.
|
99
|
-
#
|
100
|
-
# ==== Returns
|
101
|
-
#
|
102
|
-
# Boolean:: success
|
103
|
-
#
|
104
|
-
def bootstrap
|
105
|
-
create_solr_directories and create_solr_configuration_files and copy_custom_solr_libraries
|
106
|
-
end
|
107
|
-
|
108
|
-
#
|
109
|
-
# Check for bootstrap necessity
|
110
|
-
#
|
111
|
-
# ==== Returns
|
112
|
-
#
|
113
|
-
# Boolean:: neccessary
|
114
|
-
#
|
115
|
-
def bootstrap_neccessary?
|
116
|
-
!File.directory?( solr_home ) or !File.exists?( File.join( config_path, 'solrconfig.xml' ) )
|
117
|
-
end
|
118
|
-
|
119
|
-
|
120
|
-
protected
|
121
|
-
|
122
|
-
#
|
123
|
-
# Generate the start command for the sunspot-solr executable
|
124
|
-
#
|
125
|
-
# ==== Returns
|
126
|
-
#
|
127
|
-
# Array:: sunspot_start_command
|
128
|
-
#
|
129
|
-
def start_command
|
130
|
-
[ SUNSPOT_EXECUTABLE, 'start', '-p', port.to_s, '-d', data_path, '-s', solr_home, '-l', log_level, '--log-file', log_file ]
|
131
|
-
end
|
8
|
+
def start
|
9
|
+
bootstrap
|
10
|
+
super
|
11
|
+
end
|
132
12
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
#
|
138
|
-
# Array:: sunspot_stop_command
|
139
|
-
#
|
140
|
-
def stop_command
|
141
|
-
[ SUNSPOT_EXECUTABLE, 'stop' ]
|
142
|
-
end
|
13
|
+
def run
|
14
|
+
bootstrap
|
15
|
+
super
|
16
|
+
end
|
143
17
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
# access to the Sunspot::Rails::Configuration, defined in
|
157
|
-
# sunspot.yml. Use Sunspot::Rails.configuration if you want
|
158
|
-
# to access the configuration directly.
|
159
|
-
#
|
160
|
-
# ==== returns
|
161
|
-
#
|
162
|
-
# Sunspot::Rails::Configuration:: configuration
|
163
|
-
#
|
164
|
-
def configuration
|
165
|
-
Sunspot::Rails.configuration
|
166
|
-
end
|
167
|
-
|
168
|
-
private
|
169
|
-
|
170
|
-
#
|
171
|
-
# Change directory to the pid file path and execute a
|
172
|
-
# command on a subshell.
|
173
|
-
#
|
174
|
-
# ==== Returns
|
175
|
-
#
|
176
|
-
# Boolean:: success
|
177
|
-
#
|
178
|
-
def execute( command )
|
179
|
-
success = false
|
180
|
-
FileUtils.cd( pid_path ) do
|
181
|
-
success = Kernel.system(Escape.shell_command( command ))
|
182
|
-
end
|
183
|
-
success
|
184
|
-
end
|
185
|
-
|
186
|
-
#
|
187
|
-
# Create new solr_home, config, log and pid directories
|
188
|
-
#
|
189
|
-
# ==== Returns
|
190
|
-
#
|
191
|
-
# Boolean:: success
|
192
|
-
#
|
193
|
-
def create_solr_directories
|
194
|
-
[ solr_home, config_path, data_path, pid_path, lib_path ].each do |path|
|
195
|
-
FileUtils.mkdir_p( path )
|
196
|
-
end
|
18
|
+
#
|
19
|
+
# Bootstrap a new solr_home by creating all required
|
20
|
+
# directories.
|
21
|
+
#
|
22
|
+
# ==== Returns
|
23
|
+
#
|
24
|
+
# Boolean:: success
|
25
|
+
#
|
26
|
+
def bootstrap
|
27
|
+
unless @bootstrapped
|
28
|
+
install_solr_home
|
29
|
+
@bootstrapped = true
|
197
30
|
end
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# Directory to store custom libraries for solr
|
35
|
+
#
|
36
|
+
def lib_path
|
37
|
+
File.join( solr_home, 'lib' )
|
38
|
+
end
|
39
|
+
|
40
|
+
#
|
41
|
+
# Directory in which to store PID files
|
42
|
+
#
|
43
|
+
def pid_dir
|
44
|
+
File.join(::Rails.root, 'tmp', 'pids')
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# Name of the PID file
|
49
|
+
#
|
50
|
+
def pid_file
|
51
|
+
"sunspot-solr-#{::Rails.env}.pid"
|
52
|
+
end
|
53
|
+
|
54
|
+
#
|
55
|
+
# Directory to store lucene index data files
|
56
|
+
#
|
57
|
+
# ==== Returns
|
58
|
+
#
|
59
|
+
# String:: data_path
|
60
|
+
#
|
61
|
+
def solr_data_dir
|
62
|
+
File.join(solr_home, 'data', ::Rails.env)
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# Directory to use for Solr home.
|
67
|
+
#
|
68
|
+
def solr_home
|
69
|
+
File.join(::Rails.root, 'solr')
|
70
|
+
end
|
71
|
+
|
72
|
+
#
|
73
|
+
# Port on which to run Solr
|
74
|
+
#
|
75
|
+
def port
|
76
|
+
configuration.port
|
77
|
+
end
|
78
|
+
|
79
|
+
#
|
80
|
+
# Severity level for logging. This is based on the severity level for the
|
81
|
+
# Rails logger.
|
82
|
+
#
|
83
|
+
def log_level
|
84
|
+
LOG_LEVELS[::Rails.logger.level]
|
85
|
+
end
|
86
|
+
|
87
|
+
#
|
88
|
+
# Log file for Solr. File is in the rails log/ directory.
|
89
|
+
#
|
90
|
+
def log_file
|
91
|
+
File.join(::Rails.root, 'log', "sunspot-solr-#{::Rails.env}.log")
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
#
|
97
|
+
# access to the Sunspot::Rails::Configuration, defined in
|
98
|
+
# sunspot.yml. Use Sunspot::Rails.configuration if you want
|
99
|
+
# to access the configuration directly.
|
100
|
+
#
|
101
|
+
# ==== returns
|
102
|
+
#
|
103
|
+
# Sunspot::Rails::Configuration:: configuration
|
104
|
+
#
|
105
|
+
def configuration
|
106
|
+
Sunspot::Rails.configuration
|
107
|
+
end
|
108
|
+
|
109
|
+
#
|
110
|
+
# Directory to store solr config files
|
111
|
+
#
|
112
|
+
# ==== Returns
|
113
|
+
#
|
114
|
+
# String:: config_path
|
115
|
+
#
|
116
|
+
def config_path
|
117
|
+
File.join(solr_home, 'conf')
|
118
|
+
end
|
119
|
+
|
120
|
+
#
|
121
|
+
# Copy default solr configuration files from sunspot
|
122
|
+
# gem to the new solr_home/config directory
|
123
|
+
#
|
124
|
+
# ==== Returns
|
125
|
+
#
|
126
|
+
# Boolean:: success
|
127
|
+
#
|
128
|
+
def install_solr_home
|
129
|
+
unless File.exists?(solr_home)
|
130
|
+
Sunspot::Installer.execute(
|
131
|
+
solr_home,
|
132
|
+
:force => true,
|
133
|
+
:verbose => true
|
134
|
+
)
|
211
135
|
end
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
end
|
136
|
+
end
|
137
|
+
|
138
|
+
#
|
139
|
+
# Create new solr_home, config, log and pid directories
|
140
|
+
#
|
141
|
+
# ==== Returns
|
142
|
+
#
|
143
|
+
# Boolean:: success
|
144
|
+
#
|
145
|
+
def create_solr_directories
|
146
|
+
[solr_data_dir, pid_dir].each do |path|
|
147
|
+
FileUtils.mkdir_p( path )
|
225
148
|
end
|
226
149
|
end
|
227
150
|
end
|
228
151
|
end
|
229
|
-
end
|
152
|
+
end
|