From 4bd16f053847f2efe347ebda9136ef2233ee0d2c Mon Sep 17 00:00:00 2001 From: hukl Date: Tue, 28 Apr 2009 00:15:53 +0200 Subject: added thinking_sphinx plugin for fulltext search on nodes and heads --- .../thinking-sphinx/lib/thinking_sphinx/tasks.rb | 128 +++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 vendor/plugins/thinking-sphinx/lib/thinking_sphinx/tasks.rb (limited to 'vendor/plugins/thinking-sphinx/lib/thinking_sphinx/tasks.rb') diff --git a/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/tasks.rb b/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/tasks.rb new file mode 100644 index 0000000..ab8990e --- /dev/null +++ b/vendor/plugins/thinking-sphinx/lib/thinking_sphinx/tasks.rb @@ -0,0 +1,128 @@ +require 'fileutils' + +namespace :thinking_sphinx do + task :app_env do + Rake::Task[:environment].invoke if defined?(RAILS_ROOT) + Rake::Task[:merb_env].invoke if defined?(Merb) + end + + desc "Stop if running, then start a Sphinx searchd daemon using Thinking Sphinx's settings" + task :running_start => :app_env do + Rake::Task["thinking_sphinx:stop"].invoke if sphinx_running? + Rake::Task["thinking_sphinx:start"].invoke + end + + desc "Start a Sphinx searchd daemon using Thinking Sphinx's settings" + task :start => :app_env do + config = ThinkingSphinx::Configuration.instance + + FileUtils.mkdir_p config.searchd_file_path + raise RuntimeError, "searchd is already running." if sphinx_running? + + Dir["#{config.searchd_file_path}/*.spl"].each { |file| File.delete(file) } + + cmd = "#{config.bin_path}searchd --pidfile --config #{config.config_file}" + puts cmd + system cmd + + sleep(2) + + if sphinx_running? + puts "Started successfully (pid #{sphinx_pid})." + else + puts "Failed to start searchd daemon. Check #{config.searchd_log_file}." + end + end + + desc "Stop Sphinx using Thinking Sphinx's settings" + task :stop => :app_env do + raise RuntimeError, "searchd is not running." unless sphinx_running? + config = ThinkingSphinx::Configuration.instance + pid = sphinx_pid + system "#{config.bin_path}searchd --stop --config #{config.config_file}" + puts "Stopped search daemon (pid #{pid})." + end + + desc "Restart Sphinx" + task :restart => [:app_env, :stop, :start] + + desc "Generate the Sphinx configuration file using Thinking Sphinx's settings" + task :configure => :app_env do + config = ThinkingSphinx::Configuration.instance + puts "Generating Configuration to #{config.config_file}" + config.build + end + + desc "Index data for Sphinx using Thinking Sphinx's settings" + task :index => :app_env do + ThinkingSphinx::Deltas::Job.cancel_thinking_sphinx_jobs + + config = ThinkingSphinx::Configuration.instance + unless ENV["INDEX_ONLY"] == "true" + puts "Generating Configuration to #{config.config_file}" + config.build + end + + FileUtils.mkdir_p config.searchd_file_path + cmd = "#{config.bin_path}indexer --config #{config.config_file} --all" + cmd << " --rotate" if sphinx_running? + puts cmd + system cmd + end + + namespace :index do + task :delta => :app_env do + ThinkingSphinx.indexed_models.select { |model| + model.constantize.sphinx_indexes.any? { |index| index.delta? } + }.each do |model| + model.constantize.sphinx_indexes.select { |index| + index.delta? && index.delta_object.respond_to?(:delayed_index) + }.each { |index| + index.delta_object.delayed_index(index.model) + } + end + end + end + + desc "Process stored delta index requests" + task :delayed_delta => :app_env do + require 'delayed/worker' + + Delayed::Worker.new( + :min_priority => ENV['MIN_PRIORITY'], + :max_priority => ENV['MAX_PRIORITY'] + ).start + end +end + +namespace :ts do + desc "Stop if running, then start a Sphinx searchd daemon using Thinking Sphinx's settings" + task :run => "thinking_sphinx:running_start" + desc "Start a Sphinx searchd daemon using Thinking Sphinx's settings" + task :start => "thinking_sphinx:start" + desc "Stop Sphinx using Thinking Sphinx's settings" + task :stop => "thinking_sphinx:stop" + desc "Index data for Sphinx using Thinking Sphinx's settings" + task :in => "thinking_sphinx:index" + namespace :in do + desc "Index Thinking Sphinx datetime delta indexes" + task :delta => "thinking_sphinx:index:delta" + end + task :index => "thinking_sphinx:index" + desc "Restart Sphinx" + task :restart => "thinking_sphinx:restart" + desc "Generate the Sphinx configuration file using Thinking Sphinx's settings" + task :conf => "thinking_sphinx:configure" + desc "Generate the Sphinx configuration file using Thinking Sphinx's settings" + task :config => "thinking_sphinx:configure" + desc "Process stored delta index requests" + task :dd => "thinking_sphinx:delayed_delta" +end + +def sphinx_pid + ThinkingSphinx.sphinx_pid +end + +def sphinx_running? + ThinkingSphinx.sphinx_running? +end -- cgit v1.3