flying-sphinx 0.1.1 → 0.1.2

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -4,10 +4,11 @@ end
4
4
 
5
5
  require 'httparty'
6
6
  require 'net/ssh'
7
+ require 'riddle/0.9.9'
7
8
 
8
9
  require 'flying_sphinx/api'
9
10
  require 'flying_sphinx/configuration'
10
11
  require 'flying_sphinx/index_request'
11
12
  require 'flying_sphinx/tunnel'
12
13
 
13
- require 'flying_sphinx/railtie' if defined?(Rails)
14
+ require 'flying_sphinx/railtie' if defined?(Rails) && defined?(Rails::Railtie)
@@ -1,17 +1,37 @@
1
1
  class FlyingSphinx::Configuration
2
2
  attr_reader :heroku_id, :api_key, :host, :port, :database_port
3
3
 
4
- def initialize(heroku_id, api_key)
5
- @heroku_id = heroku_id
6
- @api_key = api_key
4
+ def initialize(heroku_id = nil, api_key = nil)
5
+ @heroku_id = heroku_id || heroku_id_from_env
6
+ @api_key = api_key || api_key_from_env
7
7
 
8
8
  set_from_server
9
+ setup_environment_settings
9
10
  end
10
11
 
11
12
  def api
12
13
  @api ||= FlyingSphinx::API.new(heroku_id, api_key)
13
14
  end
14
15
 
16
+ def app_name
17
+ @app_name = heroku_id.split('@').first
18
+ end
19
+
20
+ def sphinx_configuration
21
+ thinking_sphinx.generate
22
+ set_database_settings
23
+
24
+ riddle.render
25
+ end
26
+
27
+ def start_sphinx
28
+ api.post('/app/start')
29
+ end
30
+
31
+ def stop_sphinx
32
+ api.post('/app/stop')
33
+ end
34
+
15
35
  private
16
36
 
17
37
  def set_from_server
@@ -21,4 +41,59 @@ class FlyingSphinx::Configuration
21
41
  @port = json['port']
22
42
  @database_port = json['database_port']
23
43
  end
44
+
45
+ def base_path
46
+ "/mnt/sphinx/flying-sphinx/#{app_name}"
47
+ end
48
+
49
+ def log_path
50
+ "#{base_path}/log"
51
+ end
52
+
53
+ def thinking_sphinx
54
+ ThinkingSphinx::Configuration.instance
55
+ end
56
+
57
+ def riddle
58
+ thinking_sphinx.configuration
59
+ end
60
+
61
+ def setup_environment_settings
62
+ ThinkingSphinx.remote_sphinx = true
63
+
64
+ set_searchd_settings
65
+ set_path_settings
66
+ end
67
+
68
+ def set_path_settings
69
+ thinking_sphinx.searchd_file_path = "#{base_path}/indexes"
70
+
71
+ riddle.searchd.pid_file = "#{base_path}/searchd.pid"
72
+ riddle.searchd.log = "#{log_path}/searchd.log"
73
+ riddle.searchd.query_log = "#{log_path}/searchd.query.log"
74
+ end
75
+
76
+ def set_searchd_settings
77
+ thinking_sphinx_configuration.port = port
78
+ thinking_sphinx_configuration.address = host
79
+ end
80
+
81
+ def set_database_settings
82
+ riddle.indexes.each do |index|
83
+ next unless index.respond_to?(:sources)
84
+
85
+ index.sources.each do |source|
86
+ source.sql_host = '127.0.0.1'
87
+ source.sql_port = configuration.database_port
88
+ end
89
+ end
90
+ end
91
+
92
+ def heroku_id_from_env
93
+ ENV['APP_NAME'] + '@heroku.com'
94
+ end
95
+
96
+ def api_key_from_env
97
+ ENV['FLYING_SPHINX_API_KEY']
98
+ end
24
99
  end
@@ -16,41 +16,7 @@ class FlyingSphinx::IndexRequest
16
16
  private
17
17
 
18
18
  def update_sphinx_configuration
19
- api.put '/app', :configuration => sphinx_configuration
20
- end
21
-
22
- def sphinx_configuration
23
- ts_config = ThinkingSphinx::Configuration.instance
24
- ts_config.port = configuration.port
25
- ts_config.address = configuration.host
26
-
27
- riddle_config = ts_config.configuration
28
-
29
- app_name = configuration.heroku_id.split('@').first
30
- base_path = "/mnt/sphinx/flying-sphinx/#{app_name}"
31
- ts_config.searchd_file_path = "#{base_path}/indexes"
32
- riddle_config.searchd.pid_file = "#{base_path}/searchd.pid"
33
- riddle_config.searchd.log = "#{base_path}/log/searchd.log"
34
- riddle_config.searchd.query_log = "#{base_path}/log/searchd.query.log"
35
-
36
- riddle_config.indexes.clear
37
-
38
- ThinkingSphinx.context.indexed_models.each do |model|
39
- model = model.constantize
40
- model.define_indexes
41
- riddle_config.indexes.concat model.to_riddle
42
- end
43
-
44
- riddle_config.indexes.each do |index|
45
- next unless index.respond_to?(:sources)
46
-
47
- index.sources.each do |source|
48
- source.sql_host = '127.0.0.1'
49
- source.sql_port = configuration.database_port
50
- end
51
- end
52
-
53
- riddle_config.render
19
+ api.put '/app', :configuration => configuration.sphinx_configuration
54
20
  end
55
21
 
56
22
  def begin_request
@@ -1,9 +1,16 @@
1
1
  namespace :fs do
2
- task :index => :environment
2
+ task :index => :environment do
3
+ FlyingSphinx::IndexRequest.new FlyingSphinx::Configuration.new
4
+ end
3
5
 
4
- task :start => :environment
6
+ task :start => :environment do
7
+ FlyingSphinx::Configuration.new.start_sphinx
8
+ end
5
9
 
6
- task :stop => :environment
10
+ task :stop => :environment do
11
+ FlyingSphinx::Configuration.new.stop_sphinx
12
+ end
7
13
 
8
14
  task :restart => [:environment, :stop, :start]
15
+ task :rebuild => [:environment, :stop, :index, :start]
9
16
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flying-sphinx
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Pat Allan
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-12 00:00:00 +11:00
18
+ date: 2010-12-16 00:00:00 +11:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency