Commit 1bbb7864900690ab210e9167de7d98ee1b2de498

Authored by Braulio Bhavamitra
1 parent 7fc1e86f

Add solr:download task

Task solr:download downloads, unpacks and installs Solr+Jetty 3.1.0
inside acts_as_solr plugin.
Also fix PID filename according to the standard.

Downloading Solr is necessary cause it's too big to include with
noosfero (~13mb) and is not available for Debian Lenny.
vendor/plugins/acts_as_solr/config/solr_environment.rb
... ... @@ -5,11 +5,13 @@ SOLR_PATH = "#{File.dirname(File.expand_path(__FILE__))}/../solr" unless defined
5 5  
6 6 SOLR_LOGS_PATH = "#{rails_root_dir}/log" unless defined? SOLR_LOGS_PATH
7 7 SOLR_PIDS_PATH = "#{rails_root_dir}/tmp/pids" unless defined? SOLR_PIDS_PATH
  8 +SOLR_PID_FILE="#{SOLR_PIDS_PATH}/solr.#{ENV['RAILS_ENV']}.pid"
8 9 SOLR_DATA_PATH = "#{rails_root_dir}/solr/#{ENV['RAILS_ENV']}" unless defined? SOLR_DATA_PATH
9 10  
10 11 unless defined? SOLR_PORT
11 12 config = YAML::load_file(rails_root_dir+'/config/solr.yml')
12 13  
  14 + SOLR_HOST = ENV['HOST'] || URI.parse(config[ENV['RAILS_ENV']]['url']).host
13 15 SOLR_PORT = ENV['PORT'] || URI.parse(config[ENV['RAILS_ENV']]['url']).port
14 16 end
15 17  
... ...
vendor/plugins/acts_as_solr/lib/solr/xml.rb
... ... @@ -36,9 +36,8 @@ begin
36 36 Solr::XML::Element = XML::Node
37 37  
38 38 rescue LoadError => e # If we can't load either rubygems or libxml-ruby
39   - puts "Requiring REXML"
40 39 # Just use REXML.
41 40 require 'rexml/document'
42 41 Solr::XML::Element = REXML::Element
43 42  
44   -end
45 43 \ No newline at end of file
  44 +end
... ...
vendor/plugins/acts_as_solr/lib/tasks/solr.rake
... ... @@ -5,6 +5,21 @@ require 'active_record'
5 5  
6 6 namespace :solr do
7 7  
  8 + desc 'Download and install Solr+Jetty 3.1.0.'
  9 + task :download do
  10 + if (File.exists?(Rails.root + '/vendor/plugins/acts_as_solr/solr/start.jar'))
  11 + puts 'Solr already downloaded.'
  12 + else
  13 + cd '/tmp'
  14 + sh 'wget -c http://apache.mirrors.hoobly.com/lucene/solr/3.1.0/apache-solr-3.1.0.tgz'
  15 + sh 'tar xzf apache-solr-3.1.0.tgz'
  16 + cd 'apache-solr-3.1.0/example'
  17 + cp_r ['../LICENSE.txt', '../NOTICE.txt', 'README.txt', 'etc', 'lib', 'start.jar', 'webapps', 'work'], Rails.root + '/vendor/plugins/acts_as_solr/solr', :verbose => true
  18 + cd 'solr'
  19 + cp_r ['README.txt', 'bin', 'solr.xml'], Rails.root + '/vendor/plugins/acts_as_solr/solr/solr', :verbose => true
  20 + end
  21 + end
  22 +
8 23 desc 'Starts Solr. Options accepted: RAILS_ENV=your_env, PORT=XX. Defaults to development if none.'
9 24 task :start do
10 25 require "#{File.dirname(__FILE__)}/../../config/solr_environment.rb"
... ... @@ -18,12 +33,12 @@ namespace :solr do
18 33 rescue Errno::ECONNREFUSED #not responding
19 34 Dir.chdir(SOLR_PATH) do
20 35 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"
  36 + STDERR.close
  37 + exec "java #{SOLR_JVM_OPTIONS} -Dsolr.data.dir=#{SOLR_DATA_PATH} -Djetty.logs=#{SOLR_LOGS_PATH} -Djetty.host=#{SOLR_HOST} -Djetty.port=#{SOLR_PORT} -jar start.jar"
23 38 end
24 39 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}."
  40 + File.open(SOLR_PID_FILE, "w"){ |f| f << pid}
  41 + puts "#{ENV['RAILS_ENV']} Solr started successfully on #{SOLR_HOST}:#{SOLR_PORT}, pid: #{pid}."
27 42 end
28 43 end
29 44 end
... ... @@ -32,17 +47,16 @@ namespace :solr do
32 47 task :stop do
33 48 require "#{File.dirname(__FILE__)}/../../config/solr_environment.rb"
34 49 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|
  50 + if File.exists?(SOLR_PID_FILE)
  51 + File.open(SOLR_PID_FILE, "r") do |f|
38 52 pid = f.readline
39 53 Process.kill('TERM', pid.to_i)
40 54 end
41   - File.unlink(file_path)
  55 + File.unlink(SOLR_PID_FILE)
42 56 Rake::Task["solr:destroy_index"].invoke if ENV['RAILS_ENV'] == 'test'
43 57 puts "Solr shutdown successfully."
44 58 else
45   - puts "PID file not found at #{file_path}. Either Solr is not running or no PID file was written."
  59 + puts "PID file not found at #{SOLR_PID_FILE}. Either Solr is not running or no PID file was written."
46 60 end
47 61 end
48 62 end
... ...