dbsync 0.0.1

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in dbsync.gemspec
4
+ gemspec
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Bryan Ricker
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,48 @@
1
+ = dbsync
2
+
3
+ A set of rake tasks to help you sync your production
4
+ data with your local database for development.
5
+
6
+ Currently only supports:
7
+ * Rails
8
+ * MySQL
9
+
10
+ Support for more things will happen if anybody needs it.
11
+
12
+ Add the following to your +config/environments/development.rb+
13
+ file:
14
+ config.dbsync = ActiveSupport::OrderedOptions.new
15
+
16
+ config.dbsync.filename = "yourapp_production_data.dump" # The name of the remote dumpfile
17
+ config.dbsync.local_dir = "#{Rails.root}/../dbsync" # The local directory to store the dump file. No trailing slash
18
+ config.dbsync.remote_host = "66.123.4.567" # Remote server where the dumpfile is
19
+ config.dbsync.remote_dir = "~dbsync" # The directory on the remote server where the dumpfile is
20
+
21
+ Now just make sure you have something on the remote
22
+ server updating that dumpfile. I recommend a cronjob:
23
+ 0 */12 * * * /usr/bin/mysqldump yourapp_production > /home/dbsync/yourapp_production_data.dump
24
+
25
+ You will need proper SSH access into the remote server,
26
+ as the tasks use +rsync+ and +scp+ directly.
27
+
28
+ Run +rake -T dbsync+ for all of the available tasks:
29
+ rake dbsync # Alias for dbsync:pull
30
+ rake dbsync:clone # Copy the remote dump file, reset the local database, and load in the dump file
31
+ rake dbsync:clone_dump # Copy the remote dump file to a local destination
32
+ rake dbsync:config # Show the dbsync configuration
33
+ rake dbsync:fetch # Update the local dump file from the remote source
34
+ rake dbsync:merge # Merge the local dump file into the local database
35
+ rake dbsync:pull # Update the local dump file, and merge it into the local database
36
+ rake dbsync:reset # Drop & Create the database, then load the dump file.
37
+
38
+ == TODO
39
+
40
+ - Specs!
41
+
42
+ == Copyright
43
+
44
+ Copyright (c) 2012 Bryan Ricker/SCPR.
45
+
46
+ == Licence
47
+
48
+ See MIT-LICENSE for more.
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "dbsync/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "dbsync"
7
+ s.version = Dbsync::VERSION
8
+ s.authors = ["Bryan Ricker"]
9
+ s.email = ["bricker88@gmail.com"]
10
+ s.homepage = "http://github.com/bricker88/dbsync"
11
+ s.summary = %q{Easy syncing from remote to development database in Rails.}
12
+ s.description = %q{A set of rake tasks to help you sync your remote production data with your local database for development.}
13
+
14
+ s.rubyforge_project = "dbsync"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib", "lib/tasks"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ s.add_runtime_dependency "activesupport", "~> 3.2.8"
24
+ s.add_runtime_dependency "activerecord", "~> 3.2.8"
25
+ s.add_runtime_dependency "railties", "~> 3.2.8"
26
+ end
@@ -0,0 +1,9 @@
1
+ require "dbsync/version"
2
+
3
+ module Dbsync
4
+ class Railtie < Rails::Railtie
5
+ rake_tasks do
6
+ Dir[File.join(File.dirname(__FILE__),'tasks/*.rake')].each { |f| load f }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Dbsync
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,117 @@
1
+ # Easy database syncing for development/staging
2
+
3
+ desc "Alias for dbsync:pull"
4
+ task :dbsync do
5
+ Rake::Task["dbsync:pull"].invoke
6
+ end
7
+
8
+ namespace :dbsync do
9
+ task :setup => :environment do
10
+ module Dbsync
11
+ LOGGER = $stdout
12
+ CONFIG = Rails.application.config.dbsync
13
+
14
+ CONFIG['remote'] = "#{CONFIG['remote_host']}:" + File.join(CONFIG['remote_dir'], CONFIG['filename'])
15
+ CONFIG['local'] = File.join CONFIG['local_dir'], CONFIG['filename']
16
+ end
17
+
18
+ # ---------------
19
+
20
+ Dbsync::LOGGER.puts "Environment: #{Rails.env}"
21
+
22
+ if Rails.env == 'production'
23
+ raise "These tasks are destructive and shouldn't be used in the production environment."
24
+ end
25
+
26
+ #-----------------
27
+
28
+ if Dbsync::CONFIG['filename'].blank?
29
+ raise "No dump filename specified."
30
+ elsif Dbsync::CONFIG['remote'].blank?
31
+ raise "No remote dump file specified."
32
+ end
33
+
34
+ #-----------------
35
+
36
+ VERBOSE = %w{1 true}.include? ENV['VERBOSE']
37
+ DB = ActiveRecord::Base.configurations[Rails.env]
38
+ end
39
+
40
+ #-----------------------
41
+
42
+ desc "Show the dbsync configuration"
43
+ task :config => :setup do
44
+ Dbsync::LOGGER.puts "Config:"
45
+ Dbsync::LOGGER.puts Dbsync::CONFIG.to_yaml
46
+ end
47
+
48
+ #-----------------------
49
+
50
+ desc "Update the local dump file, and merge it into the local database"
51
+ task :pull => [:fetch, :merge]
52
+
53
+ desc "Copy the remote dump file, reset the local database, and load in the dump file"
54
+ task :clone => [:clone_dump, :reset]
55
+
56
+ #-----------------------
57
+
58
+ desc "Update the local dump file from the remote source"
59
+ task :fetch => :setup do
60
+ Dbsync::LOGGER.puts "Fetching #{Dbsync::CONFIG['remote']} using rsync"
61
+ output = %x{ rsync -v #{Dbsync::CONFIG['remote']} #{Dbsync::CONFIG['local']} }
62
+
63
+ if VERBOSE
64
+ Dbsync::LOGGER.puts output
65
+ end
66
+
67
+ Dbsync::LOGGER.puts "Finished."
68
+ end
69
+
70
+ #-----------------------
71
+
72
+ desc "Copy the remote dump file to a local destination"
73
+ task :clone_dump => :setup do
74
+ Dbsync::LOGGER.puts "Fetching #{Dbsync::CONFIG['remote']} using scp"
75
+ output = %x{ scp #{Dbsync::CONFIG['remote']} #{Dbsync::CONFIG['local_dir']}/ }
76
+
77
+ if VERBOSE
78
+ Dbsync::LOGGER.puts output
79
+ end
80
+
81
+ Dbsync::LOGGER.puts "Finished."
82
+ end
83
+
84
+ #-----------------------
85
+
86
+ desc "Merge the local dump file into the local database"
87
+ task :merge => :setup do
88
+ Dbsync::LOGGER.puts "Dumping data from #{Dbsync::CONFIG['local']} into #{DB['database']}"
89
+
90
+ command = "mysql "
91
+ command += "-u #{DB['username']} " if DB['username'].present?
92
+ command += "-p#{DB['password']} " if DB['password'].present?
93
+ command += "-h #{DB['host']} " if DB['host'].present?
94
+ command += "#{DB['database']} < #{Dbsync::CONFIG['local']}"
95
+
96
+ output = %x{#{command}}
97
+
98
+ if VERBOSE
99
+ Dbsync::LOGGER.puts output
100
+ end
101
+
102
+ Dbsync::LOGGER.puts "Finished."
103
+ end
104
+
105
+ #-----------------------
106
+
107
+ desc "Drop & Create the database, then load the dump file."
108
+ task :reset => :setup do
109
+ if VERBOSE
110
+ Dbsync::LOGGER.puts "Resetting database..."
111
+ end
112
+
113
+ Rake::Task["db:drop"].invoke
114
+ Rake::Task["db:create"].invoke
115
+ Rake::Task["dbsync:merge"].invoke
116
+ end
117
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dbsync
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Bryan Ricker
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: &70099915000180 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.8
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70099915000180
25
+ - !ruby/object:Gem::Dependency
26
+ name: activerecord
27
+ requirement: &70099914999600 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 3.2.8
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70099914999600
36
+ - !ruby/object:Gem::Dependency
37
+ name: railties
38
+ requirement: &70099914999120 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 3.2.8
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70099914999120
47
+ description: A set of rake tasks to help you sync your remote production data with
48
+ your local database for development.
49
+ email:
50
+ - bricker88@gmail.com
51
+ executables: []
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - .gitignore
56
+ - Gemfile
57
+ - MIT-LICENSE
58
+ - README.rdoc
59
+ - Rakefile
60
+ - dbsync.gemspec
61
+ - lib/dbsync.rb
62
+ - lib/dbsync/version.rb
63
+ - lib/tasks/dbsync.rake
64
+ homepage: http://github.com/bricker88/dbsync
65
+ licenses: []
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ - lib/tasks
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubyforge_project: dbsync
85
+ rubygems_version: 1.8.16
86
+ signing_key:
87
+ specification_version: 3
88
+ summary: Easy syncing from remote to development database in Rails.
89
+ test_files: []