replicate 1.1 → 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/bin/replicate +19 -13
- data/lib/replicate.rb +14 -0
- data/lib/replicate/active_record.rb +22 -1
- data/test/active_record_test.rb +5 -0
- metadata +3 -3
data/bin/replicate
CHANGED
@@ -6,12 +6,14 @@
|
|
6
6
|
#/ expression. The --load form reads dump data from stdin and loads into the
|
7
7
|
#/ current environment.
|
8
8
|
#/
|
9
|
-
#/
|
10
|
-
#/ -r, --require Require the library. Often used with 'config/environment'.
|
9
|
+
#/ Mode selection:
|
11
10
|
#/ -d, --dump Dump the repository and all related objects to stdout.
|
12
11
|
#/ -l, --load Load dump file data from stdin.
|
13
|
-
#/ -i, --keep-id Use replicated ids when loading dump file.
|
14
12
|
#/
|
13
|
+
#/ Options:
|
14
|
+
#/ -r, --require Require the library. Often used with 'config/environment'.
|
15
|
+
#/ -i, --keep-id Use replicated ids when loading dump file.
|
16
|
+
#/ -f, --force Allow loading in production environments.
|
15
17
|
#/ -v, --verbose Write more status output.
|
16
18
|
#/ -q, --quiet Write less status output.
|
17
19
|
$stderr.sync = true
|
@@ -23,10 +25,12 @@ verbose = false
|
|
23
25
|
quiet = false
|
24
26
|
keep_id = false
|
25
27
|
out = $stdout
|
28
|
+
force = false
|
26
29
|
|
27
30
|
# parse arguments
|
28
31
|
file = __FILE__
|
29
32
|
usage = lambda { exec "grep ^#/<'#{file}'|cut -c4-" }
|
33
|
+
original_argv = ARGV.dup
|
30
34
|
ARGV.options do |opts|
|
31
35
|
opts.on("-d", "--dump") { mode = :dump }
|
32
36
|
opts.on("-l", "--load") { mode = :load }
|
@@ -34,20 +38,17 @@ ARGV.options do |opts|
|
|
34
38
|
opts.on("-v", "--verbose") { verbose = true }
|
35
39
|
opts.on("-q", "--quiet") { quiet = true }
|
36
40
|
opts.on("-i", "--keep-id") { keep_id = true }
|
41
|
+
opts.on("--force") { force = true }
|
37
42
|
opts.on_tail("-h", "--help", &usage)
|
38
43
|
opts.parse!
|
39
44
|
end
|
40
45
|
|
41
|
-
# load
|
46
|
+
# load replicate lib and setup AR
|
42
47
|
require 'replicate'
|
43
|
-
|
44
48
|
if defined?(ActiveRecord::Base)
|
49
|
+
Replicate::AR
|
45
50
|
ActiveRecord::Base.replicate_id = keep_id
|
46
|
-
|
47
|
-
ActiveRecord::ConnectionAdapters::QueryCache.
|
48
|
-
send :attr_writer, :query_cache, :query_cache_enabled
|
49
|
-
ActiveRecord::Base.connection.send(:query_cache=, {})
|
50
|
-
ActiveRecord::Base.connection.send(:query_cache_enabled=, true)
|
51
|
+
ActiveRecord::Base.connection.enable_query_cache!
|
51
52
|
end
|
52
53
|
|
53
54
|
# dump mode means we're reading records from the database here and writing to
|
@@ -64,9 +65,14 @@ if mode == :dump
|
|
64
65
|
# load mode means we're reading objects from stdin and creating them under
|
65
66
|
# the current environment.
|
66
67
|
elsif mode == :load
|
67
|
-
Replicate
|
68
|
-
|
69
|
-
|
68
|
+
if Replicate.production_environment? && !force
|
69
|
+
abort "error: refusing to load in production environment\n" +
|
70
|
+
" manual override: #{File.basename($0)} --force #{original_argv.join(' ')}"
|
71
|
+
else
|
72
|
+
Replicate::Loader.new do |loader|
|
73
|
+
loader.log_to $stderr, verbose, quiet
|
74
|
+
loader.read $stdin
|
75
|
+
end
|
70
76
|
end
|
71
77
|
|
72
78
|
# mode not set means no -l or -d arg was given. show usage and bail.
|
data/lib/replicate.rb
CHANGED
@@ -6,5 +6,19 @@ module Replicate
|
|
6
6
|
autoload :Status, 'replicate/status'
|
7
7
|
autoload :AR, 'replicate/active_record'
|
8
8
|
|
9
|
+
# Determine if this is a production looking environment. Used in bin/replicate
|
10
|
+
# to safeguard against loading in production.
|
11
|
+
def self.production_environment?
|
12
|
+
if defined?(Rails) && Rails.respond_to?(:env)
|
13
|
+
Rails.env.to_s == 'production'
|
14
|
+
elsif defined?(RAILS_ENV)
|
15
|
+
RAILS_ENV == 'production'
|
16
|
+
elsif ENV['RAILS_ENV']
|
17
|
+
ENV['RAILS_ENV'] == 'production'
|
18
|
+
elsif ENV['RACK_ENV']
|
19
|
+
ENV['RAILS_ENV'] == 'production'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
9
23
|
AR if defined?(::ActiveRecord::Base)
|
10
24
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'active_record/version'
|
3
|
+
|
1
4
|
module Replicate
|
2
5
|
# ActiveRecord::Base instance methods used to dump replicant objects for the
|
3
6
|
# record and all 1:1 associations. This module implements the replicant_id
|
@@ -209,6 +212,7 @@ module Replicate
|
|
209
212
|
end
|
210
213
|
end
|
211
214
|
end
|
215
|
+
|
212
216
|
end
|
213
217
|
|
214
218
|
# Special object used to dump the list of associated ids for a
|
@@ -249,8 +253,25 @@ module Replicate
|
|
249
253
|
end
|
250
254
|
end
|
251
255
|
|
256
|
+
# Backport connection.enable_query_cache! for Rails 2.x
|
257
|
+
require 'active_record/connection_adapters/abstract/query_cache'
|
258
|
+
query_cache = ::ActiveRecord::ConnectionAdapters::QueryCache
|
259
|
+
if !query_cache.methods.any? { |m| m.to_sym == :enable_query_cache! }
|
260
|
+
query_cache.module_eval do
|
261
|
+
attr_writer :query_cache, :query_cache_enabled
|
262
|
+
|
263
|
+
def enable_query_cache!
|
264
|
+
@query_cache ||= {}
|
265
|
+
@query_cache_enabled = true
|
266
|
+
end
|
267
|
+
|
268
|
+
def disable_query_cache!
|
269
|
+
@query_cache_enabled = false
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
252
274
|
# Load active record and install the extension methods.
|
253
|
-
require 'active_record'
|
254
275
|
::ActiveRecord::Base.send :include, InstanceMethods
|
255
276
|
::ActiveRecord::Base.send :extend, ClassMethods
|
256
277
|
::ActiveRecord::Base.replicate_associations = []
|
data/test/active_record_test.rb
CHANGED
@@ -349,4 +349,9 @@ class ActiveRecordTest < Test::Unit::TestCase
|
|
349
349
|
user = User.find(user.id)
|
350
350
|
assert_equal timestamp, user.updated_at
|
351
351
|
end
|
352
|
+
|
353
|
+
def test_enabling_active_record_query_cache
|
354
|
+
ActiveRecord::Base.connection.enable_query_cache!
|
355
|
+
ActiveRecord::Base.connection.disable_query_cache!
|
356
|
+
end
|
352
357
|
end
|
metadata
CHANGED