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 17  
18 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 22 rake solr:download
23 23  
... ... @@ -33,19 +33,19 @@ For solr configuration the important files are solrconfig.xml and schema.xml.
33 33  
34 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 50 Pagination
51 51 ======
... ... @@ -55,20 +55,73 @@ In your tests
55 55 ======
56 56 To test code that uses `acts_as_solr` you must start a Solr server for the test environment.
57 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 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 126 Release Information
74 127 ======
... ...
vendor/plugins/acts_as_solr_reloaded/lib/tasks/solr.rake
1 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 5 SOLR_FILENAME = "apache-solr-#{SOLR_VERSION}.tgz"
6   - SOLR_DIR = "apache-solr-#{SOLR_VERSION}"
  6 + SOLR_MD5SUM = 'ac11ef4408bb015aa3a5eefcb1047aec'
7 7 SOLR_URL = "#{APACHE_MIRROR}/lucene/solr/#{SOLR_VERSION}/#{SOLR_FILENAME}"
  8 + SOLR_DIR = "apache-solr-#{SOLR_VERSION}"
8 9  
9 10 # change path if it is on testing environment
10 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 17 desc "Download and install Solr+Jetty #{SOLR_VERSION}."
13 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 28 cd "apache-solr-#{SOLR_VERSION}/example"
  29 +
23 30 cp_r ['../LICENSE.txt', '../NOTICE.txt', 'README.txt', 'etc', 'lib', 'start.jar', 'webapps', 'work'], "#{PLUGIN_ROOT}/solr", :verbose => true
24 31 cd 'solr'
25 32 cp_r ['README.txt', 'bin', 'solr.xml'], "#{PLUGIN_ROOT}/solr/solr", :verbose => true
... ... @@ -39,7 +46,12 @@ namespace :solr do
39 46 end
40 47  
41 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 55 require File.expand_path(File.dirname(__FILE__) + '/../../config/solr_environment')
44 56  
45 57 FileUtils.mkdir_p(SOLR_LOGS_PATH)
... ... @@ -58,8 +70,9 @@ namespace :solr do
58 70 # there's an issue with Net::HTTP.request where @socket is nil and raises a NoMethodError
59 71 # http://redmine.ruby-lang.org/issues/show/2708
60 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 76 windows = RUBY_PLATFORM =~ /(win|w)32$/
64 77 if windows
65 78 exec cmd
... ... @@ -70,6 +83,7 @@ namespace :solr do
70 83 exec cmd
71 84 end
72 85 end
  86 +
73 87 File.open(SOLR_PID_FILE, "w"){ |f| f << pid} unless windows
74 88 puts "#{ENV['RAILS_ENV']} Solr started successfully on #{SOLR_HOST}:#{SOLR_PORT}, pid: #{pid}."
75 89 end
... ... @@ -153,7 +167,7 @@ namespace :solr do
153 167 models.each do |model|
154 168 if clear_first
155 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 171 ActsAsSolr::Post.execute(Solr::Request::Commit.new)
158 172 end
159 173  
... ...