Class: Sunspot::Solr::Server
- Inherits:
-
Object
- Object
- Sunspot::Solr::Server
- Defined in:
- lib/sunspot/solr/server.rb
Overview
:nodoc:
Constant Summary collapse
- ServerError =
Raised if #stop is called but the server is not running
Class.new(RuntimeError)
- AlreadyRunningError =
Class.new(ServerError)
- NotRunningError =
Class.new(ServerError)
- JavaMissing =
Class.new(ServerError)
- SOLR_EXECUTABLE =
Name of the sunspot executable (shell script)
File.( File.join(File.dirname(__FILE__), '..', '..', '..', 'solr', 'bin', 'solr') )
- LOG_LEVELS =
Set['SEVERE', 'WARNING', 'INFO', 'CONFIG', 'FINE', 'FINER', 'FINEST']
Instance Attribute Summary collapse
-
#bind_address ⇒ Object
Returns the value of attribute bind_address.
-
#log_file ⇒ Object
Returns the value of attribute log_file.
-
#max_memory ⇒ Object
Returns the value of attribute max_memory.
-
#min_memory ⇒ Object
Returns the value of attribute min_memory.
- #pid_dir ⇒ Object
- #pid_file ⇒ Object
-
#port ⇒ Object
Returns the value of attribute port.
- #solr_executable ⇒ Object
- #solr_home ⇒ Object
Instance Method Summary collapse
-
#bootstrap ⇒ Object
Bootstrap a new solr_home by creating all required directories.
-
#create_solr_directories ⇒ Object
Create new solr_home, config, log and pid directories.
- #exec_in_solr_executable_directory(command) ⇒ Object
-
#initialize(*args) ⇒ Server
constructor
A new instance of Server.
-
#install_solr_home ⇒ Object
Copy default solr configuration files from sunspot gem to the new solr_home/config directory.
- #log_level ⇒ Object
- #log_level=(level) ⇒ Object
- #pid_path ⇒ Object
-
#run ⇒ Object
Run the sunspot-solr server in the foreground.
- #solr_executable_directory ⇒ Object
-
#start ⇒ Object
Start the sunspot-solr server.
-
#stop ⇒ Object
Stop the sunspot-solr server.
Constructor Details
#initialize(*args) ⇒ Server
Returns a new instance of Server.
26 27 28 29 |
# File 'lib/sunspot/solr/server.rb', line 26 def initialize(*args) ensure_java_installed super(*args) end |
Instance Attribute Details
#bind_address ⇒ Object
Returns the value of attribute bind_address.
22 23 24 |
# File 'lib/sunspot/solr/server.rb', line 22 def bind_address @bind_address end |
#log_file ⇒ Object
Returns the value of attribute log_file.
22 23 24 |
# File 'lib/sunspot/solr/server.rb', line 22 def log_file @log_file end |
#max_memory ⇒ Object
Returns the value of attribute max_memory.
22 23 24 |
# File 'lib/sunspot/solr/server.rb', line 22 def max_memory @max_memory end |
#min_memory ⇒ Object
Returns the value of attribute min_memory.
22 23 24 |
# File 'lib/sunspot/solr/server.rb', line 22 def min_memory @min_memory end |
#pid_dir ⇒ Object
146 147 148 |
# File 'lib/sunspot/solr/server.rb', line 146 def pid_dir File.(@pid_dir || FileUtils.pwd) end |
#pid_file ⇒ Object
142 143 144 |
# File 'lib/sunspot/solr/server.rb', line 142 def pid_file @pid_file || 'sunspot-solr.pid' end |
#port ⇒ Object
Returns the value of attribute port.
22 23 24 |
# File 'lib/sunspot/solr/server.rb', line 22 def port @port end |
#solr_executable ⇒ Object
154 155 156 |
# File 'lib/sunspot/solr/server.rb', line 154 def solr_executable @solr_executable || SOLR_EXECUTABLE end |
#solr_home ⇒ Object
150 151 152 |
# File 'lib/sunspot/solr/server.rb', line 150 def solr_home File.(@solr_home || File.join(File.dirname(solr_executable), '..', 'solr')) end |
Instance Method Details
#bootstrap ⇒ Object
Bootstrap a new solr_home by creating all required directories.
Returns
- Boolean
-
success
39 40 41 42 43 44 45 |
# File 'lib/sunspot/solr/server.rb', line 39 def bootstrap unless @bootstrapped install_solr_home create_solr_directories @bootstrapped = true end end |
#create_solr_directories ⇒ Object
Create new solr_home, config, log and pid directories
Returns
- Boolean
-
success
191 192 193 194 195 |
# File 'lib/sunspot/solr/server.rb', line 191 def create_solr_directories [pid_dir].each do |path| FileUtils.mkdir_p(path) unless File.exists?(path) end end |
#exec_in_solr_executable_directory(command) ⇒ Object
162 163 164 |
# File 'lib/sunspot/solr/server.rb', line 162 def exec_in_solr_executable_directory(command) FileUtils.cd(solr_executable_directory) { exec(*command) } end |
#install_solr_home ⇒ Object
Copy default solr configuration files from sunspot gem to the new solr_home/config directory
Returns
- Boolean
-
success
174 175 176 177 178 179 180 181 182 |
# File 'lib/sunspot/solr/server.rb', line 174 def install_solr_home unless File.exists?(solr_home) Sunspot::Solr::Installer.execute( solr_home, :force => true, :verbose => true ) end end |
#log_level ⇒ Object
134 135 136 |
# File 'lib/sunspot/solr/server.rb', line 134 def log_level @log_level || 'WARNING' end |
#log_level=(level) ⇒ Object
127 128 129 130 131 132 |
# File 'lib/sunspot/solr/server.rb', line 127 def log_level=(level) unless LOG_LEVELS.include?(level.to_s.upcase) raise(ArgumentError, "#{level} is not a valid log level: Use one of #{LOG_LEVELS.to_a.join(',')}") end @log_level = level.to_s.upcase end |
#pid_path ⇒ Object
138 139 140 |
# File 'lib/sunspot/solr/server.rb', line 138 def pid_path File.join(pid_dir, pid_file) end |
#run ⇒ Object
Run the sunspot-solr server in the foreground. Boostrap solr_home first, if neccessary.
Returns
- Boolean
-
success
91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/sunspot/solr/server.rb', line 91 def run bootstrap command = %w[./solr start -f] command << "-Xms#{min_memory}" if min_memory command << "-Xmx#{max_memory}" if max_memory command << "-p" << "#{port}" if port command << "-h" << "#{bind_address}" if bind_address command << "-s" << "#{solr_home}" if solr_home exec_in_solr_executable_directory(command) end |
#solr_executable_directory ⇒ Object
158 159 160 |
# File 'lib/sunspot/solr/server.rb', line 158 def solr_executable_directory @solr_executable_directory ||= File.dirname(solr_executable) end |
#start ⇒ Object
Start the sunspot-solr server. Bootstrap solr_home first, if neccessary.
Returns
- Boolean
-
success
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/sunspot/solr/server.rb', line 55 def start bootstrap if File.exist?(pid_path) existing_pid = IO.read(pid_path).to_i begin Process.kill(0, existing_pid) raise(AlreadyRunningError, "Server is already running with PID #{existing_pid}") rescue Errno::ESRCH STDERR.puts("Removing stale PID file at #{pid_path}") FileUtils.rm(pid_path) end end fork do pid = fork do Process.setsid STDIN.reopen('/dev/null') STDOUT.reopen('/dev/null') STDERR.reopen(STDOUT) run end FileUtils.mkdir_p(pid_dir) File.open(pid_path, 'w') do |file| file << pid end end end |
#stop ⇒ Object
Stop the sunspot-solr server.
Returns
- Boolean
-
success
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/sunspot/solr/server.rb', line 111 def stop if File.exist?(pid_path) pid = IO.read(pid_path).to_i begin Process.kill('TERM', pid) exec_in_solr_executable_directory(['solr', 'stop', '-p', "#{port}"]) if port rescue Errno::ESRCH raise NotRunningError, "Process with PID #{pid} is no longer running" ensure FileUtils.rm(pid_path) end else raise NotRunningError, "No PID file at #{pid_path}" end end |