yam-db-charmer 1.7.01
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/.gitignore +4 -0
- data/CHANGES +184 -0
- data/LICENSE +21 -0
- data/Makefile +2 -0
- data/README.rdoc +612 -0
- data/Rakefile +4 -0
- data/db-charmer.gemspec +29 -0
- data/init.rb +1 -0
- data/lib/db_charmer/action_controller/force_slave_reads.rb +69 -0
- data/lib/db_charmer/active_record/association_preload.rb +23 -0
- data/lib/db_charmer/active_record/class_attributes.rb +101 -0
- data/lib/db_charmer/active_record/connection_switching.rb +81 -0
- data/lib/db_charmer/active_record/db_magic.rb +85 -0
- data/lib/db_charmer/active_record/migration/multi_db_migrations.rb +71 -0
- data/lib/db_charmer/active_record/multi_db_proxy.rb +77 -0
- data/lib/db_charmer/active_record/sharding.rb +40 -0
- data/lib/db_charmer/connection_factory.rb +76 -0
- data/lib/db_charmer/connection_proxy.rb +27 -0
- data/lib/db_charmer/core_extensions.rb +23 -0
- data/lib/db_charmer/force_slave_reads.rb +36 -0
- data/lib/db_charmer/rails2/abstract_adapter/log_formatting.rb +24 -0
- data/lib/db_charmer/rails2/active_record/master_slave_routing.rb +49 -0
- data/lib/db_charmer/rails2/active_record/named_scope/scope_proxy.rb +26 -0
- data/lib/db_charmer/rails3/abstract_adapter/connection_name.rb +38 -0
- data/lib/db_charmer/rails3/active_record/log_subscriber.rb +23 -0
- data/lib/db_charmer/rails3/active_record/master_slave_routing.rb +46 -0
- data/lib/db_charmer/rails3/active_record/relation/connection_routing.rb +147 -0
- data/lib/db_charmer/rails3/active_record/relation_method.rb +28 -0
- data/lib/db_charmer/sharding/connection.rb +31 -0
- data/lib/db_charmer/sharding/method/db_block_group_map.rb +257 -0
- data/lib/db_charmer/sharding/method/db_block_map.rb +211 -0
- data/lib/db_charmer/sharding/method/hash_map.rb +23 -0
- data/lib/db_charmer/sharding/method/range.rb +33 -0
- data/lib/db_charmer/sharding/method.rb +10 -0
- data/lib/db_charmer/sharding/stub_connection.rb +60 -0
- data/lib/db_charmer/sharding.rb +18 -0
- data/lib/db_charmer/version.rb +10 -0
- data/lib/db_charmer.rb +192 -0
- data/lib/tasks/databases.rake +82 -0
- metadata +178 -0
@@ -0,0 +1,82 @@
|
|
1
|
+
namespace :db_charmer do
|
2
|
+
namespace :create do
|
3
|
+
desc 'Create all the local databases defined in config/database.yml'
|
4
|
+
task :all => "db:load_config" do
|
5
|
+
::ActiveRecord::Base.configurations.each_value do |config|
|
6
|
+
# Skip entries that don't have a database key, such as the first entry here:
|
7
|
+
#
|
8
|
+
# defaults: &defaults
|
9
|
+
# adapter: mysql
|
10
|
+
# username: root
|
11
|
+
# password:
|
12
|
+
# host: localhost
|
13
|
+
#
|
14
|
+
# development:
|
15
|
+
# database: blog_development
|
16
|
+
# <<: *defaults
|
17
|
+
next unless config['database']
|
18
|
+
# Only connect to local databases
|
19
|
+
local_database?(config) { create_core_and_sub_database(config) }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Create the databases defined in config/database.yml for the current RAILS_ENV'
|
25
|
+
task :create => "db:load_config" do
|
26
|
+
create_core_and_sub_database(ActiveRecord::Base.configurations[RAILS_ENV])
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_core_and_sub_database(config)
|
30
|
+
create_database(config)
|
31
|
+
config.each_value do | sub_config |
|
32
|
+
next unless sub_config.is_a?(Hash)
|
33
|
+
next unless sub_config['database']
|
34
|
+
create_database(sub_config)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
namespace :drop do
|
39
|
+
desc 'Drops all the local databases defined in config/database.yml'
|
40
|
+
task :all => "db:load_config" do
|
41
|
+
::ActiveRecord::Base.configurations.each_value do |config|
|
42
|
+
# Skip entries that don't have a database key
|
43
|
+
next unless config['database']
|
44
|
+
# Only connect to local databases
|
45
|
+
local_database?(config) { drop_core_and_sub_database(config) }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
desc 'Drops the database for the current RAILS_ENV'
|
51
|
+
task :drop => "db:load_config" do
|
52
|
+
config = ::ActiveRecord::Base.configurations[RAILS_ENV || 'development']
|
53
|
+
begin
|
54
|
+
drop_core_and_sub_database(config)
|
55
|
+
rescue Exception => e
|
56
|
+
puts "Couldn't drop #{config['database']} : #{e.inspect}"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
def local_database?(config, &block)
|
62
|
+
if %w( 127.0.0.1 localhost ).include?(config['host']) || config['host'].blank?
|
63
|
+
yield
|
64
|
+
else
|
65
|
+
puts "This task only modifies local databases. #{config['database']} is on a remote host."
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def drop_core_and_sub_database(config)
|
71
|
+
drop_database(config)
|
72
|
+
config.each_value do | sub_config |
|
73
|
+
next unless sub_config.is_a?(Hash)
|
74
|
+
next unless sub_config['database']
|
75
|
+
begin
|
76
|
+
drop_database(sub_config)
|
77
|
+
rescue
|
78
|
+
$stderr.puts "#{config['database']} not exists"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
metadata
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yam-db-charmer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 9
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 7
|
9
|
+
- 1
|
10
|
+
version: 1.7.01
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Oleksiy Kovyrin
|
14
|
+
- Mike Ihbe
|
15
|
+
autorequire:
|
16
|
+
bindir: bin
|
17
|
+
cert_chain: []
|
18
|
+
|
19
|
+
date: 2012-06-04 00:00:00 -07:00
|
20
|
+
default_executable:
|
21
|
+
dependencies:
|
22
|
+
- !ruby/object:Gem::Dependency
|
23
|
+
name: activesupport
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - <
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 5
|
31
|
+
segments:
|
32
|
+
- 3
|
33
|
+
- 1
|
34
|
+
version: "3.1"
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: activerecord
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - <
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 5
|
46
|
+
segments:
|
47
|
+
- 3
|
48
|
+
- 1
|
49
|
+
version: "3.1"
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: rspec
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
type: :development
|
65
|
+
version_requirements: *id003
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: yard
|
68
|
+
prerelease: false
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
hash: 3
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
78
|
+
type: :development
|
79
|
+
version_requirements: *id004
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: actionpack
|
82
|
+
prerelease: false
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
hash: 3
|
89
|
+
segments:
|
90
|
+
- 0
|
91
|
+
version: "0"
|
92
|
+
type: :development
|
93
|
+
version_requirements: *id005
|
94
|
+
description: DbCharmer is a Rails plugin (and gem) that could be used to manage AR model connections, implement master/slave query schemes, sharding and other magic features many high-scale applications need.
|
95
|
+
email: mihbe@yammer-inc.com
|
96
|
+
executables: []
|
97
|
+
|
98
|
+
extensions: []
|
99
|
+
|
100
|
+
extra_rdoc_files:
|
101
|
+
- LICENSE
|
102
|
+
- README.rdoc
|
103
|
+
files:
|
104
|
+
- .gitignore
|
105
|
+
- CHANGES
|
106
|
+
- LICENSE
|
107
|
+
- Makefile
|
108
|
+
- README.rdoc
|
109
|
+
- Rakefile
|
110
|
+
- db-charmer.gemspec
|
111
|
+
- init.rb
|
112
|
+
- lib/db_charmer.rb
|
113
|
+
- lib/db_charmer/action_controller/force_slave_reads.rb
|
114
|
+
- lib/db_charmer/active_record/association_preload.rb
|
115
|
+
- lib/db_charmer/active_record/class_attributes.rb
|
116
|
+
- lib/db_charmer/active_record/connection_switching.rb
|
117
|
+
- lib/db_charmer/active_record/db_magic.rb
|
118
|
+
- lib/db_charmer/active_record/migration/multi_db_migrations.rb
|
119
|
+
- lib/db_charmer/active_record/multi_db_proxy.rb
|
120
|
+
- lib/db_charmer/active_record/sharding.rb
|
121
|
+
- lib/db_charmer/connection_factory.rb
|
122
|
+
- lib/db_charmer/connection_proxy.rb
|
123
|
+
- lib/db_charmer/core_extensions.rb
|
124
|
+
- lib/db_charmer/force_slave_reads.rb
|
125
|
+
- lib/db_charmer/rails2/abstract_adapter/log_formatting.rb
|
126
|
+
- lib/db_charmer/rails2/active_record/master_slave_routing.rb
|
127
|
+
- lib/db_charmer/rails2/active_record/named_scope/scope_proxy.rb
|
128
|
+
- lib/db_charmer/rails3/abstract_adapter/connection_name.rb
|
129
|
+
- lib/db_charmer/rails3/active_record/log_subscriber.rb
|
130
|
+
- lib/db_charmer/rails3/active_record/master_slave_routing.rb
|
131
|
+
- lib/db_charmer/rails3/active_record/relation/connection_routing.rb
|
132
|
+
- lib/db_charmer/rails3/active_record/relation_method.rb
|
133
|
+
- lib/db_charmer/sharding.rb
|
134
|
+
- lib/db_charmer/sharding/connection.rb
|
135
|
+
- lib/db_charmer/sharding/method.rb
|
136
|
+
- lib/db_charmer/sharding/method/db_block_group_map.rb
|
137
|
+
- lib/db_charmer/sharding/method/db_block_map.rb
|
138
|
+
- lib/db_charmer/sharding/method/hash_map.rb
|
139
|
+
- lib/db_charmer/sharding/method/range.rb
|
140
|
+
- lib/db_charmer/sharding/stub_connection.rb
|
141
|
+
- lib/db_charmer/version.rb
|
142
|
+
- lib/tasks/databases.rake
|
143
|
+
has_rdoc: true
|
144
|
+
homepage: http://kovyrin.github.com/db-charmer
|
145
|
+
licenses: []
|
146
|
+
|
147
|
+
post_install_message:
|
148
|
+
rdoc_options:
|
149
|
+
- --charset=UTF-8
|
150
|
+
require_paths:
|
151
|
+
- lib
|
152
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
hash: 3
|
158
|
+
segments:
|
159
|
+
- 0
|
160
|
+
version: "0"
|
161
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
hash: 3
|
167
|
+
segments:
|
168
|
+
- 0
|
169
|
+
version: "0"
|
170
|
+
requirements: []
|
171
|
+
|
172
|
+
rubyforge_project:
|
173
|
+
rubygems_version: 1.5.2
|
174
|
+
signing_key:
|
175
|
+
specification_version: 3
|
176
|
+
summary: ActiveRecord Connections Magic (slaves, multiple connections, etc)
|
177
|
+
test_files: []
|
178
|
+
|