onemorecloud-websolr-rails 1.3.3 → 1.4.0
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/CHANGELOG +3 -0
- data/VERSION +1 -1
- data/bin/websolr +2 -0
- data/lib/instance_methods.rb +1 -0
- data/lib/tasks/solr.rake +9 -52
- data/lib/websolr_controller.rb +83 -5
- data/lib/websolr_option_parser.rb +3 -0
- data/websolr-rails.gemspec +3 -2
- metadata +3 -2
data/CHANGELOG
ADDED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.0
|
data/bin/websolr
CHANGED
data/lib/instance_methods.rb
CHANGED
@@ -15,6 +15,7 @@ module ActsAsSolr #:nodoc:
|
|
15
15
|
if method.to_s =~ /^highlighted_(.*)$/ && a.length == 0
|
16
16
|
original_field = $1
|
17
17
|
@solr_data && @solr_data[:highlights] && @solr_data[:highlights][id] &&
|
18
|
+
@solr_data[:highlights][id][original_field] &&
|
18
19
|
@solr_data[:highlights][id][original_field].join(" ") || send(original_field)
|
19
20
|
else
|
20
21
|
method_missing_without_solr_magic(method, *a, &b)
|
data/lib/tasks/solr.rake
CHANGED
@@ -5,59 +5,16 @@ require 'active_record'
|
|
5
5
|
|
6
6
|
namespace :solr do
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
# n = Net::HTTP.new('127.0.0.1', SOLR_PORT)
|
13
|
-
# n.request_head('/').value
|
14
|
-
#
|
15
|
-
# rescue Net::HTTPServerException #responding
|
16
|
-
# puts "Port #{SOLR_PORT} in use" and return
|
17
|
-
#
|
18
|
-
# rescue Errno::ECONNREFUSED #not responding
|
19
|
-
# Dir.chdir(SOLR_PATH) do
|
20
|
-
# pid = fork do
|
21
|
-
# #STDERR.close
|
22
|
-
# exec "java #{SOLR_JVM_OPTIONS} -Dsolr.data.dir=#{SOLR_DATA_PATH} -Djetty.logs=#{SOLR_LOGS_PATH} -Djetty.port=#{SOLR_PORT} -jar start.jar"
|
23
|
-
# end
|
24
|
-
# sleep(5)
|
25
|
-
# File.open("#{SOLR_PIDS_PATH}/#{ENV['RAILS_ENV']}_pid", "w"){ |f| f << pid}
|
26
|
-
# puts "#{ENV['RAILS_ENV']} Solr started successfully on #{SOLR_PORT}, pid: #{pid}."
|
27
|
-
# end
|
28
|
-
# end
|
29
|
-
# end
|
30
|
-
|
31
|
-
# desc 'Stops Solr. Specify the environment by using: RAILS_ENV=your_env. Defaults to development if none.'
|
32
|
-
# task :stop do
|
33
|
-
# require "#{File.dirname(__FILE__)}/../../config/solr_environment.rb"
|
34
|
-
# fork do
|
35
|
-
# file_path = "#{SOLR_PIDS_PATH}/#{ENV['RAILS_ENV']}_pid"
|
36
|
-
# if File.exists?(file_path)
|
37
|
-
# File.open(file_path, "r") do |f|
|
38
|
-
# pid = f.readline
|
39
|
-
# Process.kill('TERM', pid.to_i)
|
40
|
-
# end
|
41
|
-
# File.unlink(file_path)
|
42
|
-
# Rake::Task["solr:destroy_index"].invoke if ENV['RAILS_ENV'] == 'test'
|
43
|
-
# puts "Solr shutdown successfully."
|
44
|
-
# else
|
45
|
-
# puts "PID file not found at #{file_path}. Either Solr is not running or no PID file was written."
|
46
|
-
# end
|
47
|
-
# end
|
48
|
-
# end
|
49
|
-
|
50
|
-
# desc 'Remove Solr index'
|
51
|
-
# task :destroy_index do
|
52
|
-
# require "#{File.dirname(__FILE__)}/../../config/solr_environment.rb"
|
53
|
-
# raise "In production mode. I'm not going to delete the index, sorry." if ENV['RAILS_ENV'] == "production"
|
54
|
-
# if File.exists?("#{SOLR_DATA_PATH}")
|
55
|
-
# Dir["#{SOLR_DATA_PATH}/index/*"].each{|f| File.unlink(f)}
|
56
|
-
# Dir.rmdir("#{SOLR_DATA_PATH}/index")
|
57
|
-
# puts "Index files removed under " + ENV['RAILS_ENV'] + " environment"
|
58
|
-
# end
|
59
|
-
# end
|
8
|
+
desc 'Starts Solr. Options accepted: RAILS_ENV=your_env, PORT=XX. Defaults to development if none.'
|
9
|
+
task :start do
|
10
|
+
puts "Use: websolr start"
|
11
|
+
end
|
60
12
|
|
13
|
+
desc 'Stops Solr. Specify the environment by using: RAILS_ENV=your_env. Defaults to development if none.'
|
14
|
+
task :stop do
|
15
|
+
puts "Use: websolr stop"
|
16
|
+
end
|
17
|
+
|
61
18
|
# this task is by Henrik Nyh
|
62
19
|
# http://henrik.nyh.se/2007/06/rake-task-to-reindex-models-for-acts_as_solr
|
63
20
|
desc %{Reindexes data for all acts_as_solr models. Clears index first to get rid of orphaned records and optimizes index afterwards. RAILS_ENV=your_env to set environment. ONLY=book,person,magazine to only reindex those models; EXCEPT=book,magazine to exclude those models. START_SERVER=true to solr:start before and solr:stop after. BATCH=123 to post/commit in batches of that size: default is 300. CLEAR=false to not clear the index first; OPTIMIZE=false to not optimize the index afterwards.}
|
data/lib/websolr_controller.rb
CHANGED
@@ -3,9 +3,23 @@ require "rubygems"
|
|
3
3
|
require "restclient"
|
4
4
|
require 'rexml/document'
|
5
5
|
require "fileutils"
|
6
|
+
require "net/http"
|
7
|
+
include FileUtils
|
8
|
+
|
9
|
+
SOLR_PATH = "#{File.dirname(File.expand_path(__FILE__))}/../solr" unless defined? SOLR_PATH
|
10
|
+
SOLR_LOGS_PATH = "#{ENV["PWD"]}/log" unless defined? SOLR_LOGS_PATH
|
11
|
+
SOLR_PIDS_PATH = "#{ENV["PWD"]}/tmp/pids" unless defined? SOLR_PIDS_PATH
|
12
|
+
SOLR_DATA_PATH = "#{ENV["PWD"]}/solr/#{ENV['RAILS_ENV']}" unless defined? SOLR_DATA_PATH
|
13
|
+
SOLR_JVM_OPTIONS = ENV["JAVA_OPTIONS"] || "-Xmx256M"
|
14
|
+
|
15
|
+
mkdir_p SOLR_PATH
|
16
|
+
mkdir_p SOLR_LOGS_PATH
|
17
|
+
mkdir_p SOLR_PIDS_PATH
|
18
|
+
mkdir_p SOLR_DATA_PATH
|
6
19
|
|
7
20
|
class WebsolrController
|
8
|
-
COMMANDS = %w[add list delete configure]
|
21
|
+
COMMANDS = %w[add list delete configure start stop]
|
22
|
+
SOLR_PORT = 8983
|
9
23
|
|
10
24
|
def initialize(parser)
|
11
25
|
@options = parser.options
|
@@ -16,6 +30,11 @@ class WebsolrController
|
|
16
30
|
@base = "http://#{URI::escape @user}:#{URI::escape @pass}@websolr.com"
|
17
31
|
end
|
18
32
|
|
33
|
+
def die(s)
|
34
|
+
STDERR.puts s
|
35
|
+
exit(1)
|
36
|
+
end
|
37
|
+
|
19
38
|
def required_options(hash)
|
20
39
|
hash.inject(true) do |memo, (key, flag)|
|
21
40
|
unless @options[key]
|
@@ -29,6 +48,62 @@ class WebsolrController
|
|
29
48
|
URI.join(@base, url).to_s
|
30
49
|
end
|
31
50
|
|
51
|
+
def check_local_solr_conditions
|
52
|
+
ENV["RAILS_ENV"] = @options[:rails_env] || ENV["RAILS_ENV"] || "development"
|
53
|
+
begin
|
54
|
+
require "config/environment"
|
55
|
+
rescue LoadError
|
56
|
+
die("I can't find config/environment.rb. Are we in a rails app?")
|
57
|
+
end
|
58
|
+
|
59
|
+
unless url = ENV["WEBSOLR_URL"]
|
60
|
+
die("The WEBSOLR_URL environment variable is not set.\nHave you run websolr configure?")
|
61
|
+
end
|
62
|
+
uri = URI.parse(url)
|
63
|
+
@port = uri.port
|
64
|
+
rescue URI::InvalidURIError => e
|
65
|
+
die(e.message)
|
66
|
+
end
|
67
|
+
|
68
|
+
def cmd_start
|
69
|
+
check_local_solr_conditions
|
70
|
+
begin
|
71
|
+
n = Net::HTTP.new('127.0.0.1', @port)
|
72
|
+
n.request_head('/').value
|
73
|
+
|
74
|
+
rescue Net::HTTPServerException #responding
|
75
|
+
puts "Port #{@port} in use" and return
|
76
|
+
|
77
|
+
rescue Errno::ECONNREFUSED #not responding
|
78
|
+
Dir.chdir(SOLR_PATH) do
|
79
|
+
pid = fork do
|
80
|
+
exec "java #{SOLR_JVM_OPTIONS} -Dsolr.data.dir=#{SOLR_DATA_PATH} -Djetty.logs=#{SOLR_LOGS_PATH} -Djetty.port=#{@port} -jar start.jar"
|
81
|
+
end
|
82
|
+
sleep(5)
|
83
|
+
File.open("#{SOLR_PIDS_PATH}/#{ENV['RAILS_ENV']}_pid", "w"){ |f| f << pid}
|
84
|
+
puts "#{ENV['RAILS_ENV']} Solr started successfully on #{SOLR_PORT}, pid: #{pid}."
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def cmd_stop
|
90
|
+
ENV["RAILS_ENV"] = @options[:rails_env] || ENV["RAILS_ENV"] || "development"
|
91
|
+
fork do
|
92
|
+
file_path = "#{SOLR_PIDS_PATH}/#{ENV['RAILS_ENV']}_pid"
|
93
|
+
if File.exists?(file_path)
|
94
|
+
File.open(file_path, "r") do |f|
|
95
|
+
pid = f.readline
|
96
|
+
Process.kill('TERM', pid.to_i)
|
97
|
+
end
|
98
|
+
File.unlink(file_path)
|
99
|
+
Rake::Task["solr:destroy_index"].invoke if ENV['RAILS_ENV'] == 'test'
|
100
|
+
puts "Solr shutdown successfully."
|
101
|
+
else
|
102
|
+
puts "PID file not found at #{file_path}. Either Solr is not running or no PID file was written."
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
32
107
|
def cmd_add
|
33
108
|
required_options :name => "-n"
|
34
109
|
doc = post "/slices.xml", {:slice => {:name => name}}
|
@@ -72,20 +147,23 @@ class WebsolrController
|
|
72
147
|
end
|
73
148
|
|
74
149
|
def cmd_configure
|
75
|
-
required_options :name => "-n"
|
150
|
+
required_options :name => "-n"
|
76
151
|
doc = get "/slices.xml"
|
77
152
|
found = false
|
78
153
|
REXML::XPath.each(doc, "//slice") do |node|
|
79
154
|
if x(node, 'name') == self.name
|
80
155
|
found = true
|
81
156
|
FileUtils.mkdir_p "config/initializers"
|
82
|
-
path = "config/initializers/
|
157
|
+
path = "config/initializers/websolr.rb"
|
83
158
|
puts "Writing #{path}"
|
84
159
|
File.open(path, "w") do |f|
|
85
160
|
str = <<-STR
|
86
|
-
|
87
|
-
|
161
|
+
require 'websolr'
|
162
|
+
case RAILS_ENV
|
163
|
+
when 'production'
|
88
164
|
ENV['WEBSOLR_URL'] ||= '#{x node, 'base-url'}'
|
165
|
+
else
|
166
|
+
ENV['WEBSOLR_URL'] ||= 'http://localhost:8983'
|
89
167
|
end
|
90
168
|
STR
|
91
169
|
f.puts str
|
@@ -7,6 +7,9 @@ class WebsolrOptionParser < OptionParser
|
|
7
7
|
"Usage: #{$0} COMMAND [INDEX_NAME] [options]
|
8
8
|
|
9
9
|
COMMANDs:
|
10
|
+
start - starts the local development server
|
11
|
+
stop - stops the local development server
|
12
|
+
|
10
13
|
add - creates a new index
|
11
14
|
list - shows your indexes
|
12
15
|
delete - deletes an index
|
data/websolr-rails.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{websolr-rails}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kyle Maxwell"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-09-15}
|
13
13
|
s.default_executable = %q{websolr}
|
14
14
|
s.description = %q{acts_as_solr compatible gem for websolr}
|
15
15
|
s.email = %q{kyle@kylemaxwell.com}
|
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.files = [
|
22
22
|
".document",
|
23
23
|
".gitignore",
|
24
|
+
"CHANGELOG",
|
24
25
|
"LICENSE",
|
25
26
|
"README.rdoc",
|
26
27
|
"Rakefile",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onemorecloud-websolr-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kyle Maxwell
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-15 00:00:00 -07:00
|
13
13
|
default_executable: websolr
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -34,6 +34,7 @@ extra_rdoc_files:
|
|
34
34
|
files:
|
35
35
|
- .document
|
36
36
|
- .gitignore
|
37
|
+
- CHANGELOG
|
37
38
|
- LICENSE
|
38
39
|
- README.rdoc
|
39
40
|
- Rakefile
|