blavosync 0.1.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/Blavosync.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{blavosync}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["jayronc"]
@@ -14,22 +14,37 @@ Gem::Specification.new do |s|
14
14
  s.email = %q{jerrodblavos@mac.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.rdoc"
17
+ "README.markdown"
18
18
  ]
19
19
  s.files = [
20
20
  "Blavosync.gemspec",
21
+ "History.txt",
21
22
  "LICENSE",
22
- "README.rdoc",
23
+ "Manifest.txt",
24
+ "README.markdown",
23
25
  "Rakefile",
24
26
  "VERSION",
25
- "init.rb",
26
- "lib/blavosync.rb"
27
+ "lib/blavosync.rb",
28
+ "lib/blavosync/lib/ey_logger.rb",
29
+ "lib/blavosync/lib/ey_logger_hooks.rb",
30
+ "lib/blavosync/recipes.rb",
31
+ "lib/blavosync/recipes/content_rsync.rb",
32
+ "lib/blavosync/recipes/content_tar.rb",
33
+ "lib/blavosync/recipes/database.rb",
34
+ "lib/blavosync/recipes/local.rb",
35
+ "lib/blavosync/recipes/util.rb",
36
+ "test/test_blavosync.rb",
37
+ "test/test_helper.rb"
27
38
  ]
28
39
  s.homepage = %q{http://github.com/indierockmedia/Blavosync}
29
40
  s.rdoc_options = ["--charset=UTF-8"]
30
41
  s.require_paths = ["lib"]
31
42
  s.rubygems_version = %q{1.3.5}
32
43
  s.summary = %q{Sync a remote db and rsync content to your development environment.}
44
+ s.test_files = [
45
+ "test/test_blavosync.rb",
46
+ "test/test_helper.rb"
47
+ ]
33
48
 
34
49
  if s.respond_to? :specification_version then
35
50
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
data/History.txt ADDED
@@ -0,0 +1,2 @@
1
+ == 0.4.12 / 2009-12-29
2
+ * attempting to build a gem that works with EY-solo
data/Manifest.txt ADDED
@@ -0,0 +1,15 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ lib/blavosync.rb
6
+ lib/blavosync/lib/ey_logger.rb
7
+ lib/blavosync/lib/ey_logger_hooks.rb
8
+ lib/blavosync/recipes.rb
9
+ lib/blavosync/recipes/local.rb
10
+ lib/blavosync/recipes/util.rb
11
+ lib/blavosync/recipes/database.rb
12
+ lib/blavosync/recipes/content_rsync.rb
13
+ lib/blavosync/recipes/content_tar.rb
14
+ test/test_blavosync.rb
15
+ test/test_helper.rb
data/README.markdown ADDED
@@ -0,0 +1,91 @@
1
+ == blavosync
2
+
3
+ INSTALLATION:
4
+ Add this line to your config/deploy.rb file
5
+
6
+ require 'blavosync/recipes'
7
+
8
+ USAGE:
9
+ adds the following tasks to projects using capistrano
10
+
11
+ ------------------------------------------------------------
12
+ cap local:backup_content
13
+ ------------------------------------------------------------
14
+ Downloads a tarball of shared content (identified by the :shared_content and
15
+ :content _ directories properties) from a deployable environment (RAILS_ENV) to
16
+ the local filesystem.
17
+
18
+ ------------------------------------------------------------
19
+ cap local:backup _ db
20
+ ------------------------------------------------------------
21
+ Backs up deployable environment's database and copies it to
22
+ the local machine.
23
+
24
+ ------------------------------------------------------------
25
+ cap local:force _ backup _ content
26
+ ------------------------------------------------------------
27
+ Regenerate files.
28
+
29
+ ------------------------------------------------------------
30
+ cap local:force _ backup _ db
31
+ ------------------------------------------------------------
32
+ Regenerate files.
33
+
34
+ ------------------------------------------------------------
35
+ cap local:restore _ content
36
+ ------------------------------------------------------------
37
+ Restores the backed up content (env var FROM specifies which environment
38
+ was backed up, defaults to RAILS_ENV) to the local development environment app
39
+
40
+ ------------------------------------------------------------
41
+ cap local:restore _ db
42
+ ------------------------------------------------------------
43
+ Untars the backup file downloaded from local:backup_db and imports
44
+ (via mysql command line tool) it back into the development database.
45
+
46
+ ------------------------------------------------------------
47
+ cap local:resync _ db
48
+ ------------------------------------------------------------
49
+ Ensure that a fresh remote data dump is retrieved before syncing to the local
50
+ environment
51
+
52
+ ------------------------------------------------------------
53
+ cap local:sync
54
+ ------------------------------------------------------------
55
+ Wrapper for local:sync _ db and local:sync _ content
56
+ $> cap local:sync
57
+
58
+ ------------------------------------------------------------
59
+ cap local:sync_content
60
+ ------------------------------------------------------------
61
+ Wrapper for local:backup _ content and local:restore _ content
62
+ $> cap local:sync_content
63
+
64
+ ------------------------------------------------------------
65
+ cap local:sync_db
66
+ ------------------------------------------------------------
67
+ Wrapper for local:backup _ db and local:restore _ db.
68
+ $> cap local:sync _ db
69
+
70
+ ------------------------------------------------------------
71
+ cap local:sync_init
72
+ ------------------------------------------------------------
73
+ Wrapper for local:force _ backup _ db, local:force _ backup _ content, and the
74
+ local:sync to get
75
+ a completely fresh set of data from the server
76
+ $> cap local:sync
77
+
78
+
79
+ == Note on Patches/Pull Requests
80
+
81
+ * Fork the project.
82
+ * Make your feature addition or bug fix.
83
+ * Add tests for it. This is important so I don't break it in a
84
+ future version unintentionally.
85
+ * Commit, do not mess with rakefile, version, or history.
86
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
87
+ * Send me a pull request. Bonus points for topic branches.
88
+
89
+ == Copyright
90
+
91
+ Copyright (c) 2009 jayronc. See LICENSE for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.1
@@ -0,0 +1,125 @@
1
+ require 'tmpdir'
2
+ require 'fileutils'
3
+ module Capistrano
4
+
5
+ class Logger
6
+
7
+ def ey_log(level, message, line_prefix = nil)
8
+ EYLogger.log(level, message, line_prefix) if EYLogger.setup?
9
+ log_without_ey_logging(level, message, line_prefix)
10
+ end
11
+
12
+ unless method_defined?(:log_without_ey_logging)
13
+ alias_method :log_without_ey_logging, :log
14
+ alias_method :log, :ey_log
15
+ end
16
+
17
+ def close
18
+ device.close if @needs_close
19
+ EYLogger.close if EYLogger.setup?
20
+ end
21
+ end
22
+
23
+ class EYLogger
24
+
25
+ # Sets up the EYLogger to beging capturing capistrano's logging. You should pass the capistrno configuration
26
+ # and the deploy type as a string. The deploy type is for reporting purposes only but must be included.
27
+ def self.setup(configuration, deploy_type, options = {})
28
+ @_configuration = configuration
29
+ @_deploy_type = deploy_type.gsub(/:/, "_")
30
+ @_log_path = options[:deploy_log_path] || Dir.tmpdir
31
+ @_log_path << "/" unless @_log_path =~ /\/$/
32
+ FileUtils.mkdir_p(@_log_path)
33
+ @_setup = true
34
+ @_success = true
35
+ end
36
+
37
+ def self.log(level, message, line_prefix=nil)
38
+ return nil unless setup?
39
+ @release_name = @_configuration[:release_name] if @release_name.nil?
40
+ @_log_file_path = @_log_path + @release_name + ".log" unless @_log_file_path
41
+ @_deploy_log_file = File.open(@_log_file_path, "w") if @_deploy_log_file.nil?
42
+
43
+ indent = "%*s" % [Logger::MAX_LEVEL, "*" * (Logger::MAX_LEVEL - level)]
44
+ message.each do |line|
45
+ if line_prefix
46
+ @_deploy_log_file << "#{indent} [#{line_prefix}] #{line.strip}\n"
47
+ else
48
+ @_deploy_log_file << "#{indent} #{line.strip}\n"
49
+ end
50
+ end
51
+ end
52
+
53
+ def self.post_process
54
+ unless ::Interrupt === $!
55
+ puts "\n\nPlease wait while the log file is processed\n"
56
+ # Should dump the stack trace of an exception if there is one
57
+ error = $!
58
+ unless error.nil?
59
+ @_deploy_log_file << error.message << "\n"
60
+ @_deploy_log_file << error.backtrace.join("\n")
61
+ @_success = false
62
+ end
63
+ self.close
64
+
65
+ hooks = [:any]
66
+ hooks << self.successful? ? :success : :failure
67
+ puts "Executing Post Processing Hooks"
68
+ hooks.each do |h|
69
+ @_post_process_hooks[h].each do |key|
70
+ @_configuration.parent.find_and_execute_task(key)
71
+ end
72
+ end
73
+ puts "Finished Post Processing Hooks"
74
+ end
75
+ end
76
+
77
+ # Adds a post processing hook.
78
+ #
79
+ # Provide a task name to execute. These tasks are executed after capistrano has actually run its course.
80
+ #
81
+ # Takes a key to control when the hook is executed.'
82
+ # :any - always executed
83
+ # :success - only execute on success
84
+ # :failure - only execute on failure
85
+ #
86
+ # ==== Example
87
+ # Capistrano::EYLogger.post_process_hook( "ey_logger:upload_log_to_slice", :any)
88
+ #
89
+ def self.post_process_hook(task, key = :any)
90
+ @_post_process_hooks ||= Hash.new{|h,k| h[k] = []}
91
+ @_post_process_hooks[key] << task
92
+ end
93
+
94
+ def self.setup?
95
+ !!@_setup
96
+ end
97
+
98
+ def self.deploy_type
99
+ @_deploy_type
100
+ end
101
+
102
+ def self.successful?
103
+ !!@_success
104
+ end
105
+
106
+ def self.failure?
107
+ !@_success
108
+ end
109
+
110
+ def self.log_file_path
111
+ @_log_file_path
112
+ end
113
+
114
+ def self.remote_log_file_name
115
+ @_log_file_name ||= "#{@_configuration[:release_name]}-#{@_deploy_type}-#{self.successful? ? "SUCCESS" : "FAILURE"}.log"
116
+ end
117
+
118
+ def self.close
119
+ @_deploy_log_file.flush unless @_deploy_log_file.nil?
120
+ @_deploy_log_file.close unless @_deploy_log_file.nil?
121
+ @_setup = false
122
+ end
123
+
124
+ end
125
+ end
@@ -0,0 +1,14 @@
1
+ require File.join(File.dirname(__FILE__), "ey_logger")
2
+
3
+ # These tasks are setup to use with the logger as post commit hooks.
4
+ Capistrano::Configuration.instance(:must_exist).load do
5
+ namespace :ey_logger do
6
+ task :upload_log_to_slice, :except => { :no_release => true} do
7
+ logger = Capistrano::EYLogger
8
+ run "mkdir -p #{shared_path}/deploy_logs"
9
+ put File.open(logger.log_file_path).read, "#{shared_path}/deploy_logs/#{logger.remote_log_file_name}"
10
+ end
11
+ end
12
+ end
13
+
14
+ Capistrano::EYLogger.post_process_hook("ey_logger:upload_log_to_slice")
@@ -0,0 +1,39 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :local do
3
+ desc <<-DESC
4
+ Rsyncs the your production content (identified by the :shared_content and
5
+ :content_directories properties) from a deployable environment (RAILS_ENV) to the local filesystem.
6
+ DESC
7
+ task :rsync_content do
8
+ from = ENV['FROM'] || 'production'
9
+ if exists?(:domain)
10
+ remote_domain = fetch(:domain)
11
+ end
12
+ if exists?(:rsync_domain)
13
+ remote_domain = fetch(:rsync_domain)
14
+ end
15
+ system("rsync -avz -e ssh '#{user}@#{remote_domain}:#{content_path}' '#{rails_root}/tmp/'")
16
+ end
17
+
18
+ desc <<-DESC
19
+ Creates a symlink to public/system from tmp/system
20
+ DESC
21
+ task :rsync_restore_content do
22
+ # from = ENV['FROM'] || 'production'
23
+ print "\033[1;45m Linking Assets to public directory \033[0m\n"
24
+ system "ln -nfs #{rails_root}/tmp/system #{rails_root}/public/system"
25
+ end
26
+
27
+
28
+ desc <<-DESC
29
+ Wrapper for local:rsync_content and local:rsync_restore_content
30
+ $> cap local:rsync RAILS_ENV=production
31
+ DESC
32
+ task :rsync do
33
+ transaction do
34
+ rsync_content
35
+ rsync_restore_content
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,64 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+
3
+ namespace :local do
4
+ desc <<-DESC
5
+ Downloads a tarball of shared content (identified by the :shared_content and
6
+ :content_directories properties) from a deployable environment (RAILS_ENV) to the local filesystem.
7
+ DESC
8
+ task :backup_content do
9
+ files = retrieve_local_files('production', 'content')
10
+ timestamp = most_recent_local_backup(from_env, 'content').to_i
11
+ last_modified = last_mod_time(content_backup_file).to_i
12
+ should_redownload = !(timestamp == last_modified)
13
+ if should_redownload
14
+ generate_remote_content_backup if last_modified < (Time.now.to_i - (remote_backup_expires))
15
+ system("mkdir -p #{tmp_dir}")
16
+ download(content_backup_file, "#{local_content_backup_dir(:env => from_env, :timestamp=>last_modified)}.tar.#{zip_ext}", :via=> :scp) do|ch, name, sent, total|
17
+ print "\r\033[1;42m #{File.basename(name)}: #{sent}/#{total} -- #{(sent.to_f * 100 / total.to_f).to_i}% \033[0m"
18
+ end
19
+ else
20
+ print "\r\033[1;42m Your Files are already up-to-date \033[0m\n"
21
+ @current_timestamp = files.first.to_i
22
+ end
23
+ util::tmp::check
24
+ end
25
+
26
+ desc <<-DESC
27
+ Regenerate files.
28
+ DESC
29
+ task :force_backup_content do
30
+ generate_remote_content_backup
31
+ end
32
+
33
+ desc <<-DESC
34
+ Restores the backed up content (env var FROM specifies which environment
35
+ was backed up, defaults to RAILS_ENV) to the local development environment app
36
+ DESC
37
+ task :restore_content do
38
+ timestamp = most_recent_local_backup(from_env, 'content')
39
+ local_dir = local_content_backup_dir(:env => from_env, :timestamp=>timestamp)
40
+ print "\033[1;45m Local Dir: #{local_dir} \033[0m\n"
41
+ system "mkdir -p #{local_dir}"
42
+ system "tar xzf #{local_dir}.tar.#{zip_ext} -C #{local_dir}"
43
+ print "\033[1;45m Removing old public/system directory \033[0m\n"
44
+ system "rm -rf public/system"
45
+ print "\033[1;45m Moving Assets to public directory \033[0m\n"
46
+ system "mv #{local_dir}/system public/system"
47
+ print "\033[1;41m Cleaning up \033[0m\n"
48
+ system "rm -rf #{local_dir}"
49
+ end
50
+
51
+
52
+ desc <<-DESC
53
+ Wrapper for local:backup_content and local:restore_content
54
+ $> cap local:sync_content RAILS_ENV=production RESTORE_ENV=development
55
+ DESC
56
+ task :sync_content do
57
+ transaction do
58
+ backup_content
59
+ restore_content
60
+ end
61
+ end
62
+ end
63
+
64
+ end
@@ -0,0 +1,79 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+
3
+ namespace :local do
4
+ desc <<-DESC
5
+ Backs up deployable environment's database (identified by the
6
+ RAILS_ENV environment variable, which defaults to 'production') and copies it to the local machine
7
+ DESC
8
+ task :backup_db, :roles => :db do
9
+ files = retrieve_local_files(from_env, 'db')
10
+ timestamp = most_recent_local_backup(from_env, 'db').to_i
11
+ last_modified = last_mod_time(db_backup_zip_file).to_i
12
+
13
+ if last_modified < (Time.now.to_i - (remote_backup_expires))
14
+ generate_remote_db_backup
15
+ should_redownload = true
16
+ end
17
+ should_redownload = !(timestamp == last_modified)
18
+ if should_redownload
19
+ system "mkdir -p #{tmp_dir}"
20
+ download(db_backup_zip_file, "#{local_db_backup_file(:env=>from_env, :timestamp=>last_modified)}.#{zip_ext}", :via=> :scp) do|ch, name, sent, total|
21
+ print "\r\033[1;42m #{File.basename(name)}: #{sent}/#{total} -- #{(sent.to_f * 100 / total.to_f).to_i}% \033[0m"
22
+ end
23
+ else
24
+ print "\r\033[1;42m Your Files are already up-to-date \033[0m\n"
25
+ @current_timestamp = files.first.to_i
26
+ end
27
+ end
28
+
29
+ desc <<-DESC
30
+ Regenerate files.
31
+ DESC
32
+ task :force_backup_db do
33
+ generate_remote_db_backup
34
+ end
35
+
36
+ desc <<-DESC
37
+ Untars the backup file downloaded from local:backup_db (specified via the FROM env
38
+ variable, which defalts to RAILS_ENV), and imports (via mysql command line tool) it back into the database
39
+ defined in the RESTORE_ENV env variable (defaults to development).
40
+ DESC
41
+ task :restore_db, :roles => :db do
42
+ mysql_str = "mysql #{mysql_connection_for(to_env)}"
43
+ mysql_dump = "mysqldump #{mysql_connection_for(from_env)}"
44
+ local_db_create = "mysql #{mysql_connection_for(to_env)} -e \"create database if not exists #{mysql_db_for(to_env)}\""
45
+ remote_backup_file = local_db_backup_file(:env => from_env, :timestamp=>most_recent_local_backup(from_env, 'db')).strip
46
+
47
+ puts "\n\033[1;42m Restoring database backup to #{to_env} environment FROM #{remote_backup_file}--#{from_env} using #{mysql_str}\033[0m"
48
+ system(local_db_create.strip)
49
+ cmd = ""
50
+ cmd << <<-CMD
51
+ #{unzip} -c #{remote_backup_file}.#{zip_ext} > #{remote_backup_file} &&
52
+ #{mysql_str} < #{remote_backup_file} &&
53
+ rm -f #{remote_backup_file}
54
+ CMD
55
+ system(cmd.strip)
56
+ util::tmp::check
57
+ end
58
+
59
+ desc <<-DESC
60
+ Wrapper for local:backup_db and local:restore_db.
61
+ $> cap local:sync_db RAILS_ENV=production RESTORE_ENV=development
62
+ DESC
63
+ task :sync_db do
64
+ transaction do
65
+ backup_db
66
+ restore_db
67
+ end
68
+ end
69
+
70
+ desc <<-DESC
71
+ Ensure that a fresh remote data dump is retrieved before syncing to the local environment.
72
+ DESC
73
+ task :resync_db do
74
+ util::tmp::clean_remote
75
+ sync_db
76
+ end
77
+ end
78
+
79
+ end
@@ -0,0 +1,167 @@
1
+ # set :rails_root, fetch(:blavosync_local_root, Pathname.new('.').realpath )
2
+ # set :content_dir, fetch(:blavosync_content_directories, "system" )
3
+ # set :content_path, fetch(:blavosync_content_path, File.join(fetch(:shared_path), content_dir) )
4
+ # set :public_path, fetch(:blavosync_public_path, File.join(fetch(:latest_release), 'public') )
5
+ # set :remote_backup_expires, fetch(:blavosync_remote_backup_expires, 100000 )
6
+ # set :zip, fetch(:blavosync_zip_command, "gzip" )
7
+ # set :unzip, fetch(:blavosync_unzip_command, "gunzip" )
8
+ # set :zip_ext, fetch(:blavosync_compressed_extension, "gz" )
9
+ # set :tmp_dir, fetch(:blavosync_tmp_dir, "tmp" )
10
+ # set :content_sync_method, fetch(:blavosync_content_sync_method, 'rsync' )
11
+ # set :from_env, fetch(:blavosync_from_env, (ENV['FROM_ENV'].nil? ? 'production' : ENV['RAILS_ENV']) )
12
+ # set :to_env, fetch(:blavosync_to_env, (ENV['TO_ENV'].nil? ? 'development' : ENV['TO_ENV']) )
13
+ # set :rsync_content_backup_file, fetch(:blavosync_rsync_content_backup_file, "#{shared_path}/system" )
14
+ # set :tar_content_backup_file, fetch(:blavosync_tar_content_backup_file, "#{shared_path}/backup_#{from_env}_content.tar.#{zip_ext}" )
15
+ # set :db_backup_file, fetch(:blavosync_db_backup_file, "#{shared_path}/backup_#{from_env}_db.sql" )
16
+ # set :db_backup_zip_file, fetch(:blavosync_db_backup_zip_file, "#{db_backup_file}.#{zip_ext}" )
17
+ #
18
+ Capistrano::Configuration.instance(:must_exist).load do |configuration|
19
+
20
+ def rails_root
21
+ Pathname.new('.').realpath
22
+ end
23
+ def content_dir
24
+ "system"
25
+ end
26
+ def content_path
27
+ File.join(fetch(:shared_path), content_dir)
28
+ end
29
+ def public_path
30
+ File.join(fetch(:latest_release), 'public')
31
+ end
32
+ def remote_backup_expires
33
+ 100000
34
+ end
35
+ def zip
36
+ "gzip"
37
+ end
38
+ def unzip
39
+ "gunzip"
40
+ end
41
+ def zip_ext
42
+ "gz"
43
+ end
44
+ def tmp_dir
45
+ "tmp"
46
+ end
47
+ def content_sync_method
48
+ 'rsync'
49
+ end
50
+ def from_env
51
+ (ENV['FROM_ENV'].nil? ? 'production' : ENV['RAILS_ENV'])
52
+ end
53
+ def to_env
54
+ (ENV['TO_ENV'].nil? ? 'development' : ENV['TO_ENV'])
55
+ end
56
+ def rsync_content_backup_file
57
+ "#{shared_path}/system"
58
+ end
59
+ def tar_content_backup_file
60
+ "#{shared_path}/backup_#{from_env}_content.tar.#{zip_ext}"
61
+ end
62
+ def db_backup_file
63
+ "#{shared_path}/backup_#{from_env}_db.sql"
64
+ end
65
+ def db_backup_zip_file
66
+ "#{db_backup_file}.#{zip_ext}"
67
+ end
68
+
69
+
70
+
71
+
72
+ def local_content_backup_dir(args={})
73
+ timestamp = args[:timestamp] || current_timestamp
74
+ "#{tmp_dir}/#{fetch(:application)}-#{from_env}-content-#{timestamp.to_s.strip}"
75
+ end
76
+
77
+ def generate_remote_tar_content_backup
78
+ run "cd #{fetch(:shared_path)} && tar czf #{rsync_content_backup_file} 'system'"
79
+ end
80
+
81
+ def local_db_conf(env = nil)
82
+ env ||= fetch(:to_env)
83
+ fetch(:config_structure, :rails).to_sym == :sls ?
84
+ File.join('config', env.to_s, 'database.yml') :
85
+ File.join('config', 'database.yml')
86
+ end
87
+
88
+ def pluck_pass_str(db_config)
89
+ db_config['password'].nil? ? '' : "-p'#{db_config['password']}'"
90
+ end
91
+
92
+ def current_timestamp
93
+ @current_timestamp ||= Time.now.to_i.to_s.strip
94
+ end
95
+
96
+ def retrieve_local_files(env, type)
97
+ `ls -r #{tmp_dir} | awk -F"-" '{ if ($2 ~ /#{env}/ && $3 ~ /#{type}/) { print $4; } }'`.split(' ')
98
+ end
99
+
100
+ def most_recent_local_backup(env, type)
101
+ retrieve_local_files(env, type).first.to_i
102
+ end
103
+
104
+ def last_mod_time(path)
105
+ capture("stat -c%Y #{path}")
106
+ end
107
+
108
+ def server_cache_valid?(path)
109
+ capture("[ -f #{path} ] || echo '1'").empty? && ((Time.now.to_i - last_mod_time(path)) <= remote_backup_expires)
110
+ end
111
+
112
+ def generate_remote_db_backup
113
+ run "mysqldump #{mysql_connection_for(from_env)} > #{db_backup_file}"
114
+ run "rm -f #{db_backup_zip_file} && #{zip} #{db_backup_file} && rm -f #{db_backup_file}"
115
+ end
116
+
117
+ def local_db_backup_file(args = {})
118
+ env = args[:env] || 'production'
119
+ timestamp = args[:timestamp] || current_timestamp
120
+ "#{tmp_dir}/#{fetch(:application)}-#{env}-db-#{timestamp.to_s.strip}.sql"
121
+ end
122
+
123
+ def mysql_connection_for(environment)
124
+ db_settings = YAML.load_file(local_db_conf(environment))[environment]
125
+ pass = pluck_pass_str(db_settings)
126
+ host = (db_settings['host'].nil?) ? nil : "--host=#{db_settings['host']}"
127
+ socket = (db_settings['socket'].nil?) ? nil : "--socket=#{db_settings['socket']}"
128
+ user = (db_settings['username'].nil?) ? nil : "-u #{db_settings['username']}"
129
+ database = (db_settings['database'].nil?) ? nil : " #{db_settings['database']}"
130
+ [user, pass, host, socket, database ].join(" ")
131
+ end
132
+
133
+ def mysql_db_for(environment)
134
+ restore_from = ENV['FROM'] || 'production'
135
+ @from_db ||= YAML.load_file(local_db_conf(restore_from))[restore_from]
136
+ @from_database ||= (@from_db['database'].nil?) ? nil : " #{@from_db['database']}"
137
+ end
138
+
139
+ namespace :local do
140
+
141
+ desc <<-DESC
142
+ Wrapper for local:sync_db and local:sync_content
143
+ $> cap local:sync RAILS_ENV=production RESTORE_ENV=development
144
+ DESC
145
+ task :sync, :roles =>:app do
146
+ sync_db
147
+ if content_sync_method == 'tar'
148
+ sync_content
149
+ else
150
+ rsync_content
151
+ end
152
+ end
153
+
154
+ desc <<-DESC
155
+ Wrapper for local:force_backup_db, local:force_backup_content, and the local:sync to get
156
+ a completely fresh set of data from the server
157
+ $> cap local:sync RAILS_ENV=production RESTORE_ENV=development
158
+ DESC
159
+ task :sync_init, :roles =>:app do
160
+ force_backup_db
161
+ force_backup_content
162
+ sync
163
+ end
164
+
165
+ end
166
+
167
+ end
@@ -0,0 +1,21 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+
3
+ namespace :util do
4
+
5
+ namespace :tmp do
6
+ desc "[capistrano-extensions]: Displays warning if :tmp_dir has more than 10 files or is greater than 50MB"
7
+ task :check do
8
+ #[ 5 -le "`ls -1 tmp/cap | wc -l`" ] && echo "Display Me"
9
+ cmd = %Q{ [ 10 -le "`ls -1 #{tmp_dir} | wc -l`" ] || [ 50 -le "`du -sh #{tmp_dir} | awk '{print int($1)}'`" ] && printf "\033[1;41m Clean up #{tmp_dir} directory \033[0m\n" && du -sh #{tmp_dir}/* }
10
+ system(cmd)
11
+ end
12
+
13
+ desc "[capistrano-extensions]: Remove the current remote env's backups from :tmp_dir"
14
+ task :clean_remote do
15
+ system("rm -rf #{rails_root}/#{tmp_dir}/#{configuration.fetch(:application)}-*")
16
+ end
17
+
18
+ end
19
+ end
20
+
21
+ end
@@ -0,0 +1,15 @@
1
+ require 'blavosync/lib/ey_logger'
2
+ require 'blavosync/lib/ey_logger_hooks'
3
+ require 'blavosync/recipes/util'
4
+ require 'blavosync/recipes/local'
5
+ require 'blavosync/recipes/database'
6
+ require 'blavosync/recipes/content_tar'
7
+ require 'blavosync/recipes/content_rsync'
8
+
9
+ Capistrano::Configuration.instance(:must_exist).load do
10
+
11
+ default_run_options[:pty] = true if respond_to?(:default_run_options)
12
+ set :keep_releases, 3
13
+ set :runner, defer { user }
14
+
15
+ end
data/lib/blavosync.rb CHANGED
@@ -1,295 +1,3 @@
1
- Capistrano::Configuration.instance(:must_exist).load do
2
-
3
- set :rails_root, fetch(:blavosync_local_root, Pathname.new('.').realpath )
4
- set :content_dir, fetch(:blavosync_content_directories, content_directories ||= "system" )
5
- set :content_path, fetch(:blavosync_content_path, File.join(shared_path, content_dir) )
6
- set :public_path, fetch(:blavosync_public_path, File.join(latest_release, 'public') )
7
- set :remote_backup_expires, fetch(:blavosync_remote_backup_expires, 100000 )
8
- set :zip, fetch(:blavosync_zip_command, "gzip" )
9
- set :unzip, fetch(:blavosync_unzip_command, "gunzip" )
10
- set :zip_ext, fetch(:blavosync_compressed_extension, "gz" )
11
- set :tmp_dir, fetch(:blavosync_tmp_dir, "tmp" )
12
- set :content_sync_method, fetch(:blavosync_content_sync_method, 'rsync' )
13
- set :from_env, fetch(:blavosync_from_env, (ENV['FROM_ENV'].nil? ? 'production' : ENV['RAILS_ENV']) )
14
- set :to_env, fetch(:blavosync_to_env, (ENV['TO_ENV'].nil? ? 'development' : ENV['TO_ENV']) )
15
- set :rsync_content_backup_file, fetch(:blavosync_rsync_content_backup_file, "#{shared_path}/system" )
16
- set :tar_content_backup_file, fetch(:blavosync_tar_content_backup_file, "#{shared_path}/backup_#{from_env}_content.tar.#{zip_ext}" )
17
- set :db_backup_file, fetch(:blavosync_db_backup_file, "#{shared_path}/backup_#{from_env}_db.sql" )
18
- set :db_backup_zip_file, fetch(:blavosync_db_backup_zip_file, "#{db_backup_file}.#{zip_ext}" )
19
-
20
- def local_content_backup_dir(args={})
21
- timestamp = args[:timestamp] || current_timestamp
22
- "#{tmp_dir}/#{application}-#{from_env}-content-#{timestamp.to_s.strip}"
23
- end
24
-
25
- def generate_remote_tar_content_backup
26
- run "cd #{shared_path} && tar czf #{rsync_content_backup_file} 'system'"
27
- end
28
-
29
- def local_db_conf(env = nil)
30
- env ||= fetch(:to_env)
31
- fetch(:config_structure, :rails).to_sym == :sls ?
32
- File.join('config', env.to_s, 'database.yml') :
33
- File.join('config', 'database.yml')
34
- end
35
-
36
- def pluck_pass_str(db_config)
37
- db_config['password'].nil? ? '' : "-p'#{db_config['password']}'"
38
- end
39
-
40
- def current_timestamp
41
- @current_timestamp ||= Time.now.to_i.to_s.strip
42
- end
43
-
44
- def retrieve_local_files(env, type)
45
- `ls -r #{tmp_dir} | awk -F"-" '{ if ($2 ~ /#{env}/ && $3 ~ /#{type}/) { print $4; } }'`.split(' ')
46
- end
47
-
48
- def most_recent_local_backup(env, type)
49
- retrieve_local_files(env, type).first.to_i
50
- end
51
-
52
- def last_mod_time(path)
53
- capture("stat -c%Y #{path}")
54
- end
55
-
56
- def server_cache_valid?(path)
57
- capture("[ -f #{path} ] || echo '1'").empty? && ((Time.now.to_i - last_mod_time(path)) <= remote_backup_expires)
58
- end
59
-
60
- def generate_remote_db_backup
61
- run "mysqldump #{mysql_connection_for(from_env)} > #{db_backup_file}"
62
- run "rm -f #{db_backup_zip_file} && #{zip} #{db_backup_file} && rm -f #{db_backup_file}"
63
- end
64
-
65
- def local_db_backup_file(args = {})
66
- env = args[:env] || 'production'
67
- timestamp = args[:timestamp] || current_timestamp
68
- "#{tmp_dir}/#{application}-#{env}-db-#{timestamp.to_s.strip}.sql"
69
- end
70
-
71
- def mysql_connection_for(environment)
72
- db_settings = YAML.load_file(local_db_conf(environment))[environment]
73
- pass = pluck_pass_str(db_settings)
74
- host = (db_settings['host'].nil?) ? nil : "--host=#{db_settings['host']}"
75
- socket = (db_settings['socket'].nil?) ? nil : "--socket=#{db_settings['socket']}"
76
- user = (db_settings['username'].nil?) ? nil : "-u #{db_settings['username']}"
77
- database = (db_settings['database'].nil?) ? nil : " #{db_settings['database']}"
78
- [user, pass, host, socket, database ].join(" ")
79
- end
80
-
81
- def mysql_db_for(environment)
82
- restore_from = ENV['FROM'] || 'production'
83
- @from_db ||= YAML.load_file(local_db_conf(restore_from))[restore_from]
84
- @from_database ||= (@from_db['database'].nil?) ? nil : " #{@from_db['database']}"
85
- end
86
-
87
- namespace :util do
88
-
89
- namespace :tmp do
90
- desc "[capistrano-extensions]: Displays warning if :tmp_dir has more than 10 files or is greater than 50MB"
91
- task :check do
92
- #[ 5 -le "`ls -1 tmp/cap | wc -l`" ] && echo "Display Me"
93
- cmd = %Q{ [ 10 -le "`ls -1 #{tmp_dir} | wc -l`" ] || [ 50 -le "`du -sh #{tmp_dir} | awk '{print int($1)}'`" ] && printf "\033[1;41m Clean up #{tmp_dir} directory \033[0m\n" && du -sh #{tmp_dir}/* }
94
- system(cmd)
95
- end
96
-
97
- desc "[capistrano-extensions]: Remove the current remote env's backups from :tmp_dir"
98
- task :clean_remote do
99
- system("rm -rf #{rails_root}/#{tmp_dir}/#{fetch(:application)}-*")
100
- end
101
-
102
- end
103
- end
104
-
105
- namespace :local do
106
-
107
- desc <<-DESC
108
- Wrapper for local:sync_db and local:sync_content
109
- $> cap local:sync RAILS_ENV=production RESTORE_ENV=development
110
- DESC
111
- task :sync do
112
- sync_db
113
- if content_sync_method == 'tar'
114
- sync_content
115
- else
116
- rsync_content
117
- end
118
- end
119
-
120
- desc <<-DESC
121
- Wrapper for local:force_backup_db, local:force_backup_content, and the local:sync to get
122
- a completely fresh set of data from the server
123
- $> cap local:sync RAILS_ENV=production RESTORE_ENV=development
124
- DESC
125
- task :sync_init do
126
- force_backup_db
127
- force_backup_content
128
- sync
129
- end
130
-
131
- desc <<-DESC
132
- Backs up deployable environment's database (identified by the
133
- RAILS_ENV environment variable, which defaults to 'production') and copies it to the local machine
134
- DESC
135
- task :backup_db, :roles => :db do
136
- files = retrieve_local_files(from_env, 'db')
137
- timestamp = most_recent_local_backup(from_env, 'db').to_i
138
- last_modified = last_mod_time(db_backup_zip_file).to_i
139
-
140
- if last_modified < (Time.now.to_i - (remote_backup_expires))
141
- generate_remote_db_backup
142
- should_redownload = true
143
- end
144
- should_redownload = !(timestamp == last_modified)
145
- if should_redownload
146
- system "mkdir -p #{tmp_dir}"
147
- download(db_backup_zip_file, "#{local_db_backup_file(:env=>from_env, :timestamp=>last_modified)}.#{zip_ext}", :via=> :scp) do|ch, name, sent, total|
148
- print "\r\033[1;42m #{File.basename(name)}: #{sent}/#{total} -- #{(sent.to_f * 100 / total.to_f).to_i}% \033[0m"
149
- end
150
- else
151
- print "\r\033[1;42m Your Files are already up-to-date \033[0m\n"
152
- @current_timestamp = files.first.to_i
153
- end
154
- end
155
-
156
- desc <<-DESC
157
- Regenerate files.
158
- DESC
159
- task :force_backup_db do
160
- generate_remote_db_backup
161
- end
162
-
163
- desc <<-DESC
164
- Untars the backup file downloaded from local:backup_db (specified via the FROM env
165
- variable, which defalts to RAILS_ENV), and imports (via mysql command line tool) it back into the database
166
- defined in the RESTORE_ENV env variable (defaults to development).
167
- DESC
168
- task :restore_db, :roles => :db do
169
- mysql_str = "mysql #{mysql_connection_for(to_env)}"
170
- mysql_dump = "mysqldump #{mysql_connection_for(from_env)}"
171
- local_db_create = "mysql #{mysql_connection_for(to_env)} -e \"create database if not exists #{mysql_db_for(to_env)}\""
172
- remote_backup_file = local_db_backup_file(:env => from_env, :timestamp=>most_recent_local_backup(from_env, 'db')).strip
173
-
174
- puts "\n\033[1;42m Restoring database backup to #{to_env} environment FROM #{remote_backup_file}--#{from_env} using #{mysql_str}\033[0m"
175
- system(local_db_create.strip)
176
- cmd = ""
177
- cmd << <<-CMD
178
- #{unzip} -c #{remote_backup_file}.#{zip_ext} > #{remote_backup_file} &&
179
- #{mysql_str} < #{remote_backup_file} &&
180
- rm -f #{remote_backup_file}
181
- CMD
182
- system(cmd.strip)
183
- util::tmp::check
184
- end
185
-
186
- desc <<-DESC
187
- Wrapper for local:backup_db and local:restore_db.
188
- $> cap local:sync_db RAILS_ENV=production RESTORE_ENV=development
189
- DESC
190
- task :sync_db do
191
- transaction do
192
- backup_db
193
- restore_db
194
- end
195
- end
196
-
197
- desc <<-DESC
198
- Ensure that a fresh remote data dump is retrieved before syncing to the local environment.
199
- DESC
200
- task :resync_db do
201
- util::tmp::clean_remote
202
- sync_db
203
- end
204
-
205
- desc <<-DESC
206
- Rsyncs the your production content (identified by the :shared_content and
207
- :content_directories properties) from a deployable environment (RAILS_ENV) to the local filesystem.
208
- DESC
209
- task :rsync_content do
210
- from = ENV['FROM'] || 'production'
211
- system("rsync -avz -e ssh '#{user}@#{domain}:#{content_path}' '#{rails_root}/tmp/'")
212
- end
213
-
214
- desc <<-DESC
215
- Creates a symlink to public/system from tmp/system
216
- DESC
217
- task :rsync_restore_content do
218
- # from = ENV['FROM'] || 'production'
219
- print "\033[1;45m Linking Assets to public directory \033[0m\n"
220
- system "ln -nfs #{rails_root}/tmp/system #{rails_root}/public/system"
221
- end
222
-
223
-
224
- desc <<-DESC
225
- Wrapper for local:rsync_content and local:rsync_restore_content
226
- $> cap local:rsync RAILS_ENV=production
227
- DESC
228
- task :rsync do
229
- transaction do
230
- rsync_content
231
- rsync_restore_content
232
- end
233
- end
234
-
235
- desc <<-DESC
236
- Downloads a tarball of shared content (identified by the :shared_content and
237
- :content_directories properties) from a deployable environment (RAILS_ENV) to the local filesystem.
238
- DESC
239
- task :backup_content do
240
- files = retrieve_local_files('production', 'content')
241
- timestamp = most_recent_local_backup(from_env, 'content').to_i
242
- last_modified = last_mod_time(content_backup_file).to_i
243
- should_redownload = !(timestamp == last_modified)
244
- if should_redownload
245
- generate_remote_content_backup if last_modified < (Time.now.to_i - (remote_backup_expires))
246
- system("mkdir -p #{tmp_dir}")
247
- download(content_backup_file, "#{local_content_backup_dir(:env => from_env, :timestamp=>last_modified)}.tar.#{zip_ext}", :via=> :scp) do|ch, name, sent, total|
248
- print "\r\033[1;42m #{File.basename(name)}: #{sent}/#{total} -- #{(sent.to_f * 100 / total.to_f).to_i}% \033[0m"
249
- end
250
- else
251
- print "\r\033[1;42m Your Files are already up-to-date \033[0m\n"
252
- @current_timestamp = files.first.to_i
253
- end
254
- util::tmp::check
255
- end
256
-
257
- desc <<-DESC
258
- Regenerate files.
259
- DESC
260
- task :force_backup_content do
261
- generate_remote_content_backup
262
- end
263
-
264
- desc <<-DESC
265
- Restores the backed up content (env var FROM specifies which environment
266
- was backed up, defaults to RAILS_ENV) to the local development environment app
267
- DESC
268
- task :restore_content do
269
- timestamp = most_recent_local_backup(from_env, 'content')
270
- local_dir = local_content_backup_dir(:env => from_env, :timestamp=>timestamp)
271
- print "\033[1;45m Local Dir: #{local_dir} \033[0m\n"
272
- system "mkdir -p #{local_dir}"
273
- system "tar xzf #{local_dir}.tar.#{zip_ext} -C #{local_dir}"
274
- print "\033[1;45m Removing old public/system directory \033[0m\n"
275
- system "rm -rf public/system"
276
- print "\033[1;45m Moving Assets to public directory \033[0m\n"
277
- system "mv #{local_dir}/system public/system"
278
- print "\033[1;41m Cleaning up \033[0m\n"
279
- system "rm -rf #{local_dir}"
280
- end
281
-
282
-
283
- desc <<-DESC
284
- Wrapper for local:backup_content and local:restore_content
285
- $> cap local:sync_content RAILS_ENV=production RESTORE_ENV=development
286
- DESC
287
- task :sync_content do
288
- transaction do
289
- backup_content
290
- restore_content
291
- end
292
- end
293
- end
294
-
1
+ module Blavosync
2
+ VERSION = '0.1.3'
295
3
  end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestBlavosync < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/blavosync'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blavosync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - jayronc
@@ -21,15 +21,26 @@ extensions: []
21
21
 
22
22
  extra_rdoc_files:
23
23
  - LICENSE
24
- - README.rdoc
24
+ - README.markdown
25
25
  files:
26
26
  - Blavosync.gemspec
27
+ - History.txt
27
28
  - LICENSE
28
- - README.rdoc
29
+ - Manifest.txt
30
+ - README.markdown
29
31
  - Rakefile
30
32
  - VERSION
31
- - init.rb
32
33
  - lib/blavosync.rb
34
+ - lib/blavosync/lib/ey_logger.rb
35
+ - lib/blavosync/lib/ey_logger_hooks.rb
36
+ - lib/blavosync/recipes.rb
37
+ - lib/blavosync/recipes/content_rsync.rb
38
+ - lib/blavosync/recipes/content_tar.rb
39
+ - lib/blavosync/recipes/database.rb
40
+ - lib/blavosync/recipes/local.rb
41
+ - lib/blavosync/recipes/util.rb
42
+ - test/test_blavosync.rb
43
+ - test/test_helper.rb
33
44
  has_rdoc: true
34
45
  homepage: http://github.com/indierockmedia/Blavosync
35
46
  licenses: []
@@ -58,5 +69,6 @@ rubygems_version: 1.3.5
58
69
  signing_key:
59
70
  specification_version: 3
60
71
  summary: Sync a remote db and rsync content to your development environment.
61
- test_files: []
62
-
72
+ test_files:
73
+ - test/test_blavosync.rb
74
+ - test/test_helper.rb
data/README.rdoc DELETED
@@ -1,118 +0,0 @@
1
- == blavosync
2
-
3
- INSTALLATION:
4
- Add this line BELOW load 'config/deploy' in your Capfile
5
-
6
- require 'blavosync'
7
-
8
-
9
- USAGE:
10
- adds the following tasks to projects using capistrano
11
-
12
- ------------------------------------------------------------
13
- cap local:backup_content
14
- ------------------------------------------------------------
15
- Downloads a tarball of shared content (identified by the :shared_content and
16
- :content_directories properties) from a deployable environment (RAILS_ENV) to
17
- the local filesystem.
18
-
19
- ------------------------------------------------------------
20
- cap local:backup_db
21
- ------------------------------------------------------------
22
- Backs up deployable environment's database (idgit loentified by the
23
- RAILS_ENV environment variable, which defaults to 'production') and copies it to
24
- the local machine
25
-
26
- ------------------------------------------------------------
27
- cap local:force_backup_content
28
- ------------------------------------------------------------
29
- Regenerate files.
30
-
31
- ------------------------------------------------------------
32
- cap local:force_backup_db
33
- ------------------------------------------------------------
34
- Regenerate files.
35
-
36
- ------------------------------------------------------------
37
- cap local:restore_content
38
- ------------------------------------------------------------
39
- Restores the backed up content (env var FROM specifies which environment
40
- was backed up, defaults to RAILS_ENV) to the local development environment app
41
-
42
- ------------------------------------------------------------
43
- cap local:restore_db
44
- ------------------------------------------------------------
45
- Untars the backup file downloaded from local:backup_db (specified via the FROM
46
- env
47
- variable, which defalts to RAILS_ENV), and imports (via mysql command line tool)
48
- it back into the database
49
- defined in the RESTORE_ENV env variable (defaults to development).
50
-
51
- ------------------------------------------------------------
52
- cap local:resync_db
53
- ------------------------------------------------------------
54
- Ensure that a fresh remote data dump is retrieved before syncing to the local
55
- environment
56
-
57
- ------------------------------------------------------------
58
- cap local:sync
59
- ------------------------------------------------------------
60
- Wrapper for local:sync_db and local:sync_content
61
- $> cap local:sync RAILS_ENV=production RESTORE_ENV=development
62
-
63
- ------------------------------------------------------------
64
- cap local:sync_content
65
- ------------------------------------------------------------
66
- Wrapper for local:backup_content and local:restore_content
67
- $> cap local:sync_content RAILS_ENV=production RESTORE_ENV=development
68
-
69
- ------------------------------------------------------------
70
- cap local:sync_db
71
- ------------------------------------------------------------
72
- Wrapper for local:backup_db and local:restore_db.
73
- $> cap local:sync_db RAILS_ENV=production RESTORE_ENV=development
74
-
75
- ------------------------------------------------------------
76
- cap local:sync_init
77
- ------------------------------------------------------------
78
- Wrapper for local:force_backup_db, local:force_backup_content, and the
79
- local:sync to get
80
- a completely fresh set of data from the server
81
- $> cap local:sync RAILS_ENV=production RESTORE_ENV=development
82
-
83
- CONFIGURATION:
84
-
85
- the following variables (with defaults shown) are available in your deploy.rb
86
-
87
-
88
- set :blavosync_local_root, Pathname.new('.').realpath
89
- set :blavosync_content_directories, content_directories ||= "system"
90
- set :blavosync_content_path, File.join(shared_path, content_dir)
91
- set :blavosync_public_path, File.join(latest_release, 'public')
92
- set :blavosync_remote_backup_expires, 100000
93
- set :blavosync_zip_command, "gzip"
94
- set :blavosync_unzip_command, "gunzip"
95
- set :blavosync_compressed_extension, "gz"
96
- set :blavosync_tmp_dir, "tmp"
97
- set :blavosync_content_sync_method, 'rsync'
98
- set :blavosync_from_env, (ENV['FROM_ENV'].nil? ? 'production' : ENV['RAILS_ENV'])
99
- set :blavosync_to_env, (ENV['TO_ENV'].nil? ? 'development' : ENV['TO_ENV'])
100
- set :blavosync_rsync_content_backup_file, "#{shared_path}/system"
101
- set :blavosync_tar_content_backup_file, "#{shared_path}/backup_#{from_env}_content.tar.#{zip_ext}"
102
- set :blavosync_db_backup_file, "#{shared_path}/backup_#{from_env}_db.sql"
103
- set :blavosync_db_backup_zip_file, "#{db_backup_file}.#{zip_ext}"
104
-
105
-
106
- == Note on Patches/Pull Requests
107
-
108
- * Fork the project.
109
- * Make your feature addition or bug fix.
110
- * Add tests for it. This is important so I don't break it in a
111
- future version unintentionally.
112
- * Commit, do not mess with rakefile, version, or history.
113
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
114
- * Send me a pull request. Bonus points for topic branches.
115
-
116
- == Copyright
117
-
118
- Copyright (c) 2009 jayronc. See LICENSE for details.
data/init.rb DELETED
@@ -1,3 +0,0 @@
1
- ['lib/blavosync.rb','recipes/shared_sync.rb', 'recipes/content_rsync.rb', 'recipes/content_sync.rb', 'recipes/db_sync.rb'].each do |file|
2
- load Dir[File.join(File.dirname(__FILE__), file)]
3
- end