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_START_JAR =
Name of the sunspot executable (shell script)
File.( File.join(File.dirname(__FILE__), '..', '..', '..', 'solr', 'start.jar') )
- 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_data_dir ⇒ Object
- #solr_home ⇒ Object
- #solr_jar ⇒ 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.
-
#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.
-
#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
150 151 152 |
# File 'lib/sunspot/solr/server.rb', line 150 def pid_dir File.(@pid_dir || FileUtils.pwd) end |
#pid_file ⇒ Object
146 147 148 |
# File 'lib/sunspot/solr/server.rb', line 146 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_data_dir ⇒ Object
154 155 156 |
# File 'lib/sunspot/solr/server.rb', line 154 def solr_data_dir File.(@solr_data_dir || Dir.tmpdir) end |
#solr_home ⇒ Object
158 159 160 |
# File 'lib/sunspot/solr/server.rb', line 158 def solr_home File.(@solr_home || File.join(File.dirname(solr_jar), 'solr')) end |
#solr_jar ⇒ Object
162 163 164 |
# File 'lib/sunspot/solr/server.rb', line 162 def solr_jar @solr_jar || SOLR_START_JAR 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 [solr_data_dir, pid_dir].each do |path| FileUtils.mkdir_p(path) unless File.exists?(path) end 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
138 139 140 |
# File 'lib/sunspot/solr/server.rb', line 138 def log_level @log_level || 'WARNING' end |
#log_level=(level) ⇒ Object
131 132 133 134 135 136 |
# File 'lib/sunspot/solr/server.rb', line 131 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
142 143 144 |
# File 'lib/sunspot/solr/server.rb', line 142 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 103 104 105 106 107 |
# File 'lib/sunspot/solr/server.rb', line 91 def run bootstrap command = ['java'] command << "-Xms#{min_memory}" if min_memory command << "-Xmx#{max_memory}" if max_memory command << "-Djetty.port=#{port}" if port command << "-Djetty.host=#{bind_address}" if bind_address command << "-Dsolr.data.dir=#{solr_data_dir}" if solr_data_dir command << "-Dsolr.solr.home=#{solr_home}" if solr_home command << "-Djava.util.logging.config.file=#{logging_config_path}" if logging_config_path command << "-Djava.awt.headless=true" command << '-jar' << File.basename(solr_jar) FileUtils.cd(File.dirname(solr_jar)) do exec(*command) end 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
116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/sunspot/solr/server.rb', line 116 def stop if File.exist?(pid_path) pid = IO.read(pid_path).to_i begin Process.kill('TERM', pid) 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 |