Commit ac93c7fdac4e8f2ac9998c302bae2c476f752000

Authored by Braulio Bhavamitra
1 parent 8151ee67

Force Solr manual download

vendor/plugins/acts_as_solr_reloaded/README.markdown
@@ -17,7 +17,7 @@ Install as a plugin @@ -17,7 +17,7 @@ Install as a plugin
17 17
18 script/plugin install git://github.com/brauliobo/acts_as_solr_reloaded.git 18 script/plugin install git://github.com/brauliobo/acts_as_solr_reloaded.git
19 19
20 -Download Solr 3.5 20 +Download Solr
21 21
22 rake solr:download 22 rake solr:download
23 23
@@ -33,19 +33,19 @@ For solr configuration the important files are solrconfig.xml and schema.xml. @@ -33,19 +33,19 @@ For solr configuration the important files are solrconfig.xml and schema.xml.
33 33
34 Basic Usage 34 Basic Usage
35 ====== 35 ======
36 -<pre><code>  
37 -# Just include the line below to any of your ActiveRecord models:  
38 - acts_as_solr 36 +Just include the line below to any of your ActiveRecord models:
39 37
40 -# Or if you want, you can specify only the fields that should be indexed:  
41 - acts_as_solr :fields => [:name, :author] 38 + acts_as_solr
42 39
43 -# Then to find instances of your model, just do:  
44 - Model.search(query) #query is a string representing your query 40 +Or if you want, you can specify only the fields that should be indexed:
45 41
46 -# Please see ActsAsSolr::ActsMethods for a complete info 42 + acts_as_solr :fields => [:name, :author]
  43 +
  44 +Then to find instances of your model, just do:
47 45
48 -</code></pre> 46 + Model.search(query) #query is a string representing your query
  47 +
  48 +Please see ActsAsSolr::ActsMethods for a complete info
49 49
50 Pagination 50 Pagination
51 ====== 51 ======
@@ -55,20 +55,73 @@ In your tests @@ -55,20 +55,73 @@ In your tests
55 ====== 55 ======
56 To test code that uses `acts_as_solr` you must start a Solr server for the test environment. 56 To test code that uses `acts_as_solr` you must start a Solr server for the test environment.
57 You can add to the beggining of your test/test_helper.rb the code: 57 You can add to the beggining of your test/test_helper.rb the code:
58 -<pre><code>  
59 -ENV["RAILS_ENV"] = "test"  
60 -abort unless system 'rake solr:start'  
61 -at_exit { system 'rake solr:stop' }  
62 -</pre></code> 58 +
  59 + ENV["RAILS_ENV"] = "test"
  60 + abort unless system 'rake solr:start'
  61 + at_exit { system 'rake solr:stop' }
63 62
64 However, if you would like to mock out Solr calls so that a Solr server is not needed (and your tests will run much faster), just add this to your `test_helper.rb` or similar: 63 However, if you would like to mock out Solr calls so that a Solr server is not needed (and your tests will run much faster), just add this to your `test_helper.rb` or similar:
65 -<pre><code>  
66 -class ActsAsSolr::Post  
67 - def self.execute(request)  
68 - true  
69 - end  
70 -end  
71 -</pre></code> 64 +
  65 + class ActsAsSolr::Post
  66 + def self.execute(request)
  67 + true
  68 + end
  69 + end
  70 +
  71 +Or to be more realistic and preserve performance, enable Solr when needed,
  72 +by calling `TestSolr.enable` and disable solr otherwise by calling
  73 +`TestSolr.disable` on `Test::Unit::TestCase`'s `setup`:
  74 +
  75 + class ActsAsSolr::Post
  76 + class << self
  77 + alias_method :execute_orig, :execute
  78 + end
  79 + end
  80 + module ActsAsSolr::ParserMethods
  81 + alias_method :parse_results_orig, :parse_results
  82 + end
  83 +
  84 + class TestSolr
  85 +
  86 + def self.enable
  87 + ActsAsSolr::Post.class_eval do
  88 + def self.execute(*args)
  89 + execute_orig *args
  90 + end
  91 + end
  92 + ActsAsSolr::ParserMethods.module_eval do
  93 + def parse_results(*args)
  94 + parse_results_orig *args
  95 + end
  96 + end
  97 +
  98 + # clear index
  99 + ActsAsSolr::Post.execute(Solr::Request::Delete.new(:query => '*:*'))
  100 +
  101 + @solr_disabled = false
  102 + end
  103 +
  104 + def self.disable
  105 + return if @solr_disabled
  106 +
  107 + ActsAsSolr::Post.class_eval do
  108 + def self.execute(*args)
  109 + true
  110 + end
  111 + end
  112 + ActsAsSolr::ParserMethods.module_eval do
  113 + def parse_results(*args)
  114 + parse_results_orig nil, args[1]
  115 + end
  116 + end
  117 +
  118 + @solr_disabled = true
  119 + end
  120 +
  121 + end
  122 +
  123 + # disable solr actions by default
  124 + TestSolr.disable
72 125
73 Release Information 126 Release Information
74 ====== 127 ======
vendor/plugins/acts_as_solr_reloaded/lib/tasks/solr.rake
1 namespace :solr do 1 namespace :solr do
2 2
3 - SOLR_VERSION = '3.5.0'  
4 - APACHE_MIRROR = "http://ftp.unicamp.br/pub/apache" 3 + APACHE_MIRROR = ENV['APACHE_MIRROR'] || "http://ftp.unicamp.br/pub/apache"
  4 + SOLR_VERSION = '3.6.0'
5 SOLR_FILENAME = "apache-solr-#{SOLR_VERSION}.tgz" 5 SOLR_FILENAME = "apache-solr-#{SOLR_VERSION}.tgz"
6 - SOLR_DIR = "apache-solr-#{SOLR_VERSION}" 6 + SOLR_MD5SUM = 'ac11ef4408bb015aa3a5eefcb1047aec'
7 SOLR_URL = "#{APACHE_MIRROR}/lucene/solr/#{SOLR_VERSION}/#{SOLR_FILENAME}" 7 SOLR_URL = "#{APACHE_MIRROR}/lucene/solr/#{SOLR_VERSION}/#{SOLR_FILENAME}"
  8 + SOLR_DIR = "apache-solr-#{SOLR_VERSION}"
8 9
9 # change path if it is on testing environment 10 # change path if it is on testing environment
10 PLUGIN_ROOT = File.expand_path("#{File.dirname(__FILE__)}/../..") 11 PLUGIN_ROOT = File.expand_path("#{File.dirname(__FILE__)}/../..")
11 12
  13 + def solr_downloaded?
  14 + File.exists?("#{PLUGIN_ROOT}/solr/start.jar")
  15 + end
  16 +
12 desc "Download and install Solr+Jetty #{SOLR_VERSION}." 17 desc "Download and install Solr+Jetty #{SOLR_VERSION}."
13 task :download do 18 task :download do
14 - if File.exists?("#{PLUGIN_ROOT}/solr/start.jar")  
15 - puts 'Solr already downloaded.'  
16 - else  
17 - Dir.chdir '/tmp' do  
18 - sh "wget -c #{SOLR_URL}"  
19 - if !File.directory?("/tmp/#{SOLR_DIR}")  
20 - sh "tar xzf apache-solr-#{SOLR_VERSION}.tgz"  
21 - end 19 + abort 'Solr already downloaded.' if solr_downloaded?
  20 +
  21 + Dir.chdir '/tmp' do
  22 + sh "wget -c #{SOLR_URL}"
  23 +
  24 + sh "echo \"#{SOLR_MD5SUM} /tmp/#{SOLR_FILENAME}\" | md5sum -c -" do |ok, res|
  25 + abort "MD5SUM do not match" if !ok
  26 +
  27 + sh "tar xzf apache-solr-#{SOLR_VERSION}.tgz"
22 cd "apache-solr-#{SOLR_VERSION}/example" 28 cd "apache-solr-#{SOLR_VERSION}/example"
  29 +
23 cp_r ['../LICENSE.txt', '../NOTICE.txt', 'README.txt', 'etc', 'lib', 'start.jar', 'webapps', 'work'], "#{PLUGIN_ROOT}/solr", :verbose => true 30 cp_r ['../LICENSE.txt', '../NOTICE.txt', 'README.txt', 'etc', 'lib', 'start.jar', 'webapps', 'work'], "#{PLUGIN_ROOT}/solr", :verbose => true
24 cd 'solr' 31 cd 'solr'
25 cp_r ['README.txt', 'bin', 'solr.xml'], "#{PLUGIN_ROOT}/solr/solr", :verbose => true 32 cp_r ['README.txt', 'bin', 'solr.xml'], "#{PLUGIN_ROOT}/solr/solr", :verbose => true
@@ -39,7 +46,12 @@ namespace :solr do @@ -39,7 +46,12 @@ namespace :solr do
39 end 46 end
40 47
41 desc 'Starts Solr. Options accepted: RAILS_ENV=your_env, PORT=XX. Defaults to development if none.' 48 desc 'Starts Solr. Options accepted: RAILS_ENV=your_env, PORT=XX. Defaults to development if none.'
42 - task :start => [:download] do 49 + task :start do
  50 + if !solr_downloaded?
  51 + puts "ERROR: Can't find Solr on the source code! Please run 'rake solr:download'."
  52 + return
  53 + end
  54 +
43 require File.expand_path(File.dirname(__FILE__) + '/../../config/solr_environment') 55 require File.expand_path(File.dirname(__FILE__) + '/../../config/solr_environment')
44 56
45 FileUtils.mkdir_p(SOLR_LOGS_PATH) 57 FileUtils.mkdir_p(SOLR_LOGS_PATH)
@@ -58,8 +70,9 @@ namespace :solr do @@ -58,8 +70,9 @@ namespace :solr do
58 # there's an issue with Net::HTTP.request where @socket is nil and raises a NoMethodError 70 # there's an issue with Net::HTTP.request where @socket is nil and raises a NoMethodError
59 # http://redmine.ruby-lang.org/issues/show/2708 71 # http://redmine.ruby-lang.org/issues/show/2708
60 Dir.chdir(SOLR_PATH) do 72 Dir.chdir(SOLR_PATH) do
61 - cmd = "java #{SOLR_JVM_OPTIONS} -Djetty.logs=\"#{SOLR_LOGS_PATH}\" -Dsolr.solr.home=\"#{SOLR_CONFIG_PATH}\" -Dsolr.data.dir=\"#{SOLR_DATA_PATH}\" -Djetty.host=\"#{SOLR_HOST}\" -Djetty.port=#{SOLR_PORT} -jar start.jar"  
62 - puts "Executing: " + cmd 73 + cmd = "java #{SOLR_JVM_OPTIONS} -Djetty.logs=\"#{SOLR_LOGS_PATH}\" -Dsolr.solr.home=\"#{SOLR_CONFIG_PATH}\"" +
  74 + " -Dsolr.data.dir=\"#{SOLR_DATA_PATH}\" -Djetty.host=\"#{SOLR_HOST}\" -Djetty.port=#{SOLR_PORT} -jar start.jar"
  75 +
63 windows = RUBY_PLATFORM =~ /(win|w)32$/ 76 windows = RUBY_PLATFORM =~ /(win|w)32$/
64 if windows 77 if windows
65 exec cmd 78 exec cmd
@@ -70,6 +83,7 @@ namespace :solr do @@ -70,6 +83,7 @@ namespace :solr do
70 exec cmd 83 exec cmd
71 end 84 end
72 end 85 end
  86 +
73 File.open(SOLR_PID_FILE, "w"){ |f| f << pid} unless windows 87 File.open(SOLR_PID_FILE, "w"){ |f| f << pid} unless windows
74 puts "#{ENV['RAILS_ENV']} Solr started successfully on #{SOLR_HOST}:#{SOLR_PORT}, pid: #{pid}." 88 puts "#{ENV['RAILS_ENV']} Solr started successfully on #{SOLR_HOST}:#{SOLR_PORT}, pid: #{pid}."
75 end 89 end
@@ -153,7 +167,7 @@ namespace :solr do @@ -153,7 +167,7 @@ namespace :solr do
153 models.each do |model| 167 models.each do |model|
154 if clear_first 168 if clear_first
155 puts "Clearing index for #{model}..." 169 puts "Clearing index for #{model}..."
156 - ActsAsSolr::Post.execute(Solr::Request::Delete.new(:query => "#{model.solr_configuration[:type_field]}:\"#{model}\"")) 170 + ActsAsSolr::Post.execute(Solr::Request::Delete.new(:query => "#{model.solr_configuration[:type_field]}:#{Solr::Util.query_parser_escape(model.name)}"))
157 ActsAsSolr::Post.execute(Solr::Request::Commit.new) 171 ActsAsSolr::Post.execute(Solr::Request::Commit.new)
158 end 172 end
159 173