yoomee-mongosphinx 0.1.5 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/.DS_Store ADDED
Binary file
@@ -11,17 +11,43 @@ require 'mongo_mapper'
11
11
  require 'riddle'
12
12
 
13
13
  module MongoSphinx
14
- if (match = __FILE__.match(/mongosphinx-([0-9.-]*)/))
14
+ if (match = __FILE__.match(/.*mongo_sphinx-([0-9.-]*)/))
15
15
  VERSION = match[1]
16
16
  else
17
17
  VERSION = 'unknown'
18
18
  end
19
+
20
+ # Check if Sphinx is running.
21
+
22
+ def self.sphinx_running?
23
+ !!sphinx_pid && pid_active?(sphinx_pid)
24
+ end
25
+
26
+ # Get the Sphinx pid if the pid file exists.
27
+
28
+ def self.sphinx_pid
29
+ if File.exists?(MongoSphinx::Configuration.instance.pid_file)
30
+ File.read(MongoSphinx::Configuration.instance.pid_file)[/\d+/]
31
+ else
32
+ nil
33
+ end
34
+ end
35
+
36
+ def self.pid_active?(pid)
37
+ !!Process.kill(0, pid.to_i)
38
+ rescue Errno::EPERM => e
39
+ true
40
+ rescue Exception => e
41
+ false
42
+ end
43
+
19
44
  end
20
45
 
21
- require 'lib/multi_attribute'
22
- require 'lib/indexer'
23
- require 'lib/mixins/indexer'
24
- require 'lib/mixins/properties'
46
+ require 'mongo_sphinx/multi_attribute'
47
+ require 'mongo_sphinx/configuration'
48
+ require 'mongo_sphinx/indexer'
49
+ require 'mongo_sphinx/mixins/indexer'
50
+ require 'mongo_sphinx/mixins/properties'
25
51
 
26
52
 
27
53
  # Include the Indexer mixin from the original Document class of
Binary file
@@ -0,0 +1,197 @@
1
+ require 'erb'
2
+ require 'singleton'
3
+
4
+ module MongoSphinx
5
+ # This class both keeps track of the configuration settings for Sphinx and
6
+ # also generates the resulting file for Sphinx to use.
7
+ #
8
+ # Here are the default settings, relative to RAILS_ROOT where relevant:
9
+ #
10
+ # config file:: config/#{environment}.sphinx.conf
11
+ # searchd log file:: log/searchd.log
12
+ # query log file:: log/searchd.query.log
13
+ # pid file:: log/searchd.#{environment}.pid
14
+ # searchd files:: db/sphinx/#{environment}/
15
+ # address:: 127.0.0.1
16
+ # port:: 9312
17
+ # allow star:: false
18
+ # min prefix length:: 1
19
+ # min infix length:: 1
20
+ # mem limit:: 64M
21
+ # max matches:: 1000
22
+ # morphology:: nil
23
+ # charset type:: utf-8
24
+ # charset table:: nil
25
+ # ignore chars:: nil
26
+ # html strip:: false
27
+ # html remove elements:: ''
28
+ # searchd_binary_name:: searchd
29
+ # indexer_binary_name:: indexer
30
+ #
31
+ # If you want to change these settings, create a YAML file at
32
+ # config/sphinx.yml with settings for each environment, in a similar
33
+ # fashion to database.yml - using the following keys: config_file,
34
+ # searchd_log_file, query_log_file, pid_file, searchd_file_path, port,
35
+ # allow_star, enable_star, min_prefix_len, min_infix_len, mem_limit,
36
+ # max_matches, morphology, charset_type, charset_table, ignore_chars,
37
+ # html_strip, html_remove_elements, delayed_job_priority,
38
+ # searchd_binary_name, indexer_binary_name.
39
+ #
40
+ # I think you've got the idea.
41
+ #
42
+ # Each setting in the YAML file is optional - so only put in the ones you
43
+ # want to change.
44
+ #
45
+ # Keep in mind, if for some particular reason you're using a version of
46
+ # Sphinx older than 0.9.8 r871 (that's prior to the proper 0.9.8 release),
47
+ # don't set allow_star to true.
48
+ #
49
+ class Configuration
50
+ include Singleton
51
+
52
+ attr_accessor :searchd_file_path, :allow_star,:app_root, :delayed_job_priority
53
+ attr_accessor :version
54
+
55
+ attr_accessor :source_options, :index_options
56
+
57
+ attr_reader :environment, :configuration, :controller
58
+
59
+ def initialize(app_root = Dir.pwd)
60
+ self.reset
61
+ end
62
+
63
+ def self.configure(&block)
64
+ yield instance
65
+ instance.reset(instance.app_root)
66
+ end
67
+
68
+ def reset(custom_app_root=nil)
69
+ if custom_app_root
70
+ self.app_root = custom_app_root
71
+ else
72
+ self.app_root = RAILS_ROOT if defined?(RAILS_ROOT)
73
+ self.app_root = Merb.root if defined?(Merb)
74
+ self.app_root ||= app_root
75
+ end
76
+
77
+ @configuration = Riddle::Configuration.new
78
+ @configuration.searchd.pid_file = "#{self.app_root}/log/mongo_sphinx.searchd.#{environment}.pid"
79
+ @configuration.searchd.log = "#{self.app_root}/log/mongo_sphinx.searchd.log"
80
+ @configuration.searchd.query_log = "#{self.app_root}/log/mongo_sphinx.query.log"
81
+
82
+ @controller = Riddle::Controller.new @configuration,
83
+ "#{self.app_root}/config/#{environment}.mongo_sphinx.conf"
84
+
85
+ self.address = "127.0.0.1"
86
+ self.port = 9312
87
+ self.searchd_file_path = "#{self.app_root}/db/mongo_sphinx/#{environment}"
88
+ self.allow_star = false
89
+ self.delayed_job_priority = 0
90
+ self.source_options = {}
91
+ self.index_options = {
92
+ :charset_type => "utf-8"
93
+ }
94
+
95
+ self.version = nil
96
+ self.version ||= @controller.sphinx_version
97
+
98
+ self
99
+ end
100
+
101
+ def self.environment
102
+ Thread.current[:mongo_sphinx_environment] ||= begin
103
+ if defined?(Merb)
104
+ Merb.environment
105
+ elsif defined?(RAILS_ENV)
106
+ RAILS_ENV
107
+ else
108
+ ENV['RAILS_ENV'] || 'development'
109
+ end
110
+ end
111
+ end
112
+
113
+ def environment
114
+ self.class.environment
115
+ end
116
+
117
+ def address
118
+ @address
119
+ end
120
+
121
+ def address=(address)
122
+ @address = address
123
+ @configuration.searchd.address = address
124
+ end
125
+
126
+ def port
127
+ @port
128
+ end
129
+
130
+ def port=(port)
131
+ @port = port
132
+ @configuration.searchd.port = port
133
+ end
134
+
135
+ def pid_file
136
+ @configuration.searchd.pid_file
137
+ end
138
+
139
+ def pid_file=(pid_file)
140
+ @configuration.searchd.pid_file = pid_file
141
+ end
142
+
143
+ def searchd_log_file
144
+ @configuration.searchd.log
145
+ end
146
+
147
+ def searchd_log_file=(file)
148
+ @configuration.searchd.log = file
149
+ end
150
+
151
+ def query_log_file
152
+ @configuration.searchd.query_log
153
+ end
154
+
155
+ def query_log_file=(file)
156
+ @configuration.searchd.query_log = file
157
+ end
158
+
159
+ def config_file
160
+ @controller.path
161
+ end
162
+
163
+ def config_file=(file)
164
+ @controller.path = file
165
+ end
166
+
167
+ def bin_path
168
+ @controller.bin_path
169
+ end
170
+
171
+ def bin_path=(path)
172
+ @controller.bin_path = path
173
+ end
174
+
175
+ def searchd_binary_name
176
+ @controller.searchd_binary_name
177
+ end
178
+
179
+ def searchd_binary_name=(name)
180
+ @controller.searchd_binary_name = name
181
+ end
182
+
183
+ def indexer_binary_name
184
+ @controller.indexer_binary_name
185
+ end
186
+
187
+ def indexer_binary_name=(name)
188
+ @controller.indexer_binary_name = name
189
+ end
190
+
191
+ def client
192
+ client = Riddle::Client.new address, port
193
+ client.max_matches = configuration.searchd.max_matches || 1000
194
+ client
195
+ end
196
+ end
197
+ end
File without changes
Binary file
@@ -107,6 +107,9 @@ module MongoMapper # :nodoc:
107
107
  attr_accessor :skip_delta_index
108
108
  alias_method :skip_delta_index?, :skip_delta_index
109
109
 
110
+ attr_accessor :skip_set_delta
111
+ alias_method :skip_set_delta?, :skip_set_delta
112
+
110
113
  self.has_delta_index = opts[:delta] || false
111
114
 
112
115
  self.fulltext_keys = keys
@@ -130,7 +133,7 @@ module MongoMapper # :nodoc:
130
133
  self.class::reindex_delta unless self.skip_delta_index?
131
134
  end
132
135
  define_method(:set_delta) do
133
- self.delta = true
136
+ self.delta = true unless self.skip_set_delta?
134
137
  end
135
138
  end
136
139
 
@@ -140,7 +143,7 @@ module MongoMapper # :nodoc:
140
143
  end
141
144
  define_method :reindex_core do
142
145
  Rails.logger.info("reindexing #{self.to_s.underscore}_core")
143
- Process.fork {`rake mongosphinx:rebuild index=#{self.to_s.underscore}_core`}
146
+ Process.fork {`rake mongo_sphinx:rebuild index=#{self.to_s.underscore}_core`}
144
147
  end
145
148
  if opts[:delta]
146
149
  define_method :xml_for_sphinx_delta do
@@ -148,7 +151,7 @@ module MongoMapper # :nodoc:
148
151
  end
149
152
  define_method :reindex_delta do
150
153
  Rails.logger.info("reindexing #{self.to_s.underscore}_delta")
151
- Process.fork {`rake mongosphinx:rebuild index=#{self.to_s.underscore}_delta`}
154
+ Process.fork {`rake mongo_sphinx:rebuild index=#{self.to_s.underscore}_delta`}
152
155
  end
153
156
  end
154
157
  end
@@ -209,6 +212,7 @@ module MongoMapper # :nodoc:
209
212
  index_names += "#{class_name.underscore}_core "
210
213
  index_names += "#{class_name.underscore}_delta " if class_name.camelize.constantize.has_delta_index
211
214
  end
215
+ debugger
212
216
  index_names = "*" if index_names.blank?
213
217
  result = client.query(query, index_names)
214
218
 
File without changes
@@ -0,0 +1,126 @@
1
+ require 'fileutils'
2
+
3
+ namespace :mongo_sphinx do
4
+ task :app_env do
5
+ if defined?(RAILS_ROOT)
6
+ Rake::Task[:environment].invoke
7
+
8
+ if defined?(Rails.configuration)
9
+ Rails.configuration.cache_classes = false
10
+ else
11
+ Rails::Initializer.run { |config| config.cache_classes = false }
12
+ end
13
+ end
14
+
15
+ Rake::Task[:merb_env].invoke if defined?(Merb)
16
+ end
17
+
18
+ desc "Output the current Mongo Sphinx version"
19
+ task :version => :app_env do
20
+ puts "Mongo Sphinx v" + MongoSphinx.version
21
+ end
22
+
23
+ desc "Stop if running, then start a Sphinx searchd daemon using Mongo Sphinx's settings"
24
+ task :running_start => :app_env do
25
+ Rake::Task["mongo_sphinx:stop"].invoke if sphinx_running?
26
+ Rake::Task["mongo_sphinx:start"].invoke
27
+ end
28
+
29
+ desc "Start a Sphinx searchd daemon using Mongo Sphinx's settings"
30
+ task :start => :app_env do
31
+ config = MongoSphinx::Configuration.instance
32
+
33
+ FileUtils.mkdir_p config.searchd_file_path
34
+ raise RuntimeError, "searchd is already running." if sphinx_running?
35
+
36
+ Dir["#{config.searchd_file_path}/*.spl"].each { |file| File.delete(file) }
37
+
38
+ config.controller.start
39
+
40
+ if sphinx_running?
41
+ puts "Started successfully (pid #{sphinx_pid})."
42
+ else
43
+ puts "Failed to start searchd daemon. Check #{config.searchd_log_file}"
44
+ end
45
+ end
46
+
47
+ desc "Stop Sphinx using Mongo Sphinx's settings"
48
+ task :stop => :app_env do
49
+ unless sphinx_running?
50
+ puts "searchd is not running"
51
+ else
52
+ config = MongoSphinx::Configuration.instance
53
+ pid = sphinx_pid
54
+ config.controller.stop
55
+ puts "Stopped search daemon (pid #{pid})."
56
+ end
57
+ end
58
+
59
+ desc "Restart Sphinx"
60
+ task :restart => [:app_env, :stop, :start]
61
+
62
+ desc "Generate the Sphinx configuration file using Mongo Sphinx's settings"
63
+ task :configure => :app_env do
64
+ config = MongoSphinx::Configuration.instance
65
+ puts "Generating Configuration to #{config.config_file}"
66
+ config.build
67
+ end
68
+
69
+ desc "Index data for Sphinx using Mongo Sphinx's settings"
70
+ task :index => :app_env do
71
+ config = MongoSphinx::Configuration.instance
72
+ # unless ENV["INDEX_ONLY"] == "true"
73
+ # puts "Generating Configuration to #{config.config_file}"
74
+ # config.build
75
+ # end
76
+
77
+ FileUtils.mkdir_p config.searchd_file_path
78
+ config.controller.index :verbose => true
79
+ end
80
+
81
+ desc "Reindex Sphinx without regenerating the configuration file"
82
+ task :reindex => :app_env do
83
+ config = MongoSphinx::Configuration.instance
84
+ FileUtils.mkdir_p config.searchd_file_path
85
+ puts config.controller.index
86
+ end
87
+
88
+ desc "Stop Sphinx (if it's running), rebuild the indexes, and start Sphinx"
89
+ task :rebuild => :app_env do
90
+ Rake::Task["mongo_sphinx:stop"].invoke if sphinx_running?
91
+ Rake::Task["mongo_sphinx:index"].invoke
92
+ Rake::Task["mongo_sphinx:start"].invoke
93
+ end
94
+ end
95
+
96
+ namespace :ms do
97
+ desc "Output the current Mongo Sphinx version"
98
+ task :version => "mongo_sphinx:version"
99
+ desc "Stop if running, then start a Sphinx searchd daemon using Mongo Sphinx's settings"
100
+ task :run => "mongo_sphinx:running_start"
101
+ desc "Start a Sphinx searchd daemon using Mongo Sphinx's settings"
102
+ task :start => "mongo_sphinx:start"
103
+ desc "Stop Sphinx using Mongo Sphinx's settings"
104
+ task :stop => "mongo_sphinx:stop"
105
+ desc "Index data for Sphinx using Mongo Sphinx's settings"
106
+ task :in => "mongo_sphinx:index"
107
+ task :index => "mongo_sphinx:index"
108
+ desc "Reindex Sphinx without regenerating the configuration file"
109
+ task :reindex => "mongo_sphinx:reindex"
110
+ desc "Restart Sphinx"
111
+ task :restart => "mongo_sphinx:restart"
112
+ desc "Generate the Sphinx configuration file using Mongo Sphinx's settings"
113
+ task :conf => "mongo_sphinx:configure"
114
+ desc "Generate the Sphinx configuration file using Mongo Sphinx's settings"
115
+ task :config => "mongo_sphinx:configure"
116
+ desc "Stop Sphinx (if it's running), rebuild the indexes, and start Sphinx"
117
+ task :rebuild => "mongo_sphinx:rebuild"
118
+ end
119
+
120
+ def sphinx_pid
121
+ MongoSphinx.sphinx_pid
122
+ end
123
+
124
+ def sphinx_running?
125
+ MongoSphinx.sphinx_running?
126
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yoomee-mongosphinx
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 5
10
- version: 0.1.5
9
+ - 8
10
+ version: 0.1.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matt Atkins
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-20 00:00:00 +01:00
18
+ date: 2010-08-24 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -29,11 +29,16 @@ extra_rdoc_files:
29
29
  - README.rdoc
30
30
  files:
31
31
  - README.rdoc
32
- - mongosphinx.rb
33
- - lib/multi_attribute.rb
34
- - lib/mixins/properties.rb
35
- - lib/mixins/indexer.rb
36
- - lib/indexer.rb
32
+ - lib/mongo_sphinx.rb
33
+ - lib/mongo_sphinx/tasks.rb
34
+ - lib/mongo_sphinx/multi_attribute.rb
35
+ - lib/mongo_sphinx/mixins/properties.rb
36
+ - lib/mongo_sphinx/mixins/indexer.rb
37
+ - lib/mongo_sphinx/mixins/.DS_Store
38
+ - lib/mongo_sphinx/indexer.rb
39
+ - lib/mongo_sphinx/configuration.rb
40
+ - lib/mongo_sphinx/.DS_Store
41
+ - lib/.DS_Store
37
42
  has_rdoc: true
38
43
  homepage: http://github.com/yoomee/mongosphinx
39
44
  licenses: []