capistrano_transmit 0.2.2 → 1.0.0

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/README.rdoc CHANGED
@@ -24,7 +24,7 @@ Mac OS X development.
24
24
 
25
25
  or in your +Gemfile+:
26
26
 
27
- gem 'capistrano_transmit'
27
+ gem 'capistrano_transmit', '~> 1.0.0'
28
28
 
29
29
  Then add to your deploy.rb:
30
30
 
@@ -32,19 +32,18 @@ Then add to your deploy.rb:
32
32
 
33
33
  == Examples
34
34
 
35
- cap transmit:get:mysql # Fetch the remote production MySQL database
36
- # and overwrite your local development database with it
37
- cap transmit:get:assets # Fetch the remote assets into your local development environment
38
-
39
-
35
+ cap transmit:get:mysql # Fetch the production database into local development
40
36
  cap transmit:put:mysql # Overwrite the production MySQL database with your development data
41
37
 
42
38
  == Prerequisites
43
39
 
44
- This Capistrano extension assumes some variables are present in your deploy.rb:
40
+ You need Capistrano 2 for this gem to work.
41
+
42
+ A couple variables can be overridden by setting them in config/deploy.rb:
45
43
 
46
- user # the SSH user for connecting to the deploy host
47
- deploy_host # the host on which to run the db dump
44
+ user # SSH user, defaults to nil, which falls back to your unix user
45
+ deploy_host # the host on which to run the db dump, falls back to your first db
46
+ dumpfile # remote pathname to dump the database in, defaults to tmp/${production}.sql.gz
48
47
 
49
48
 
50
49
  Copyright (c) 2010-2011 Joost Baaij, released under the MIT license.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{capistrano_transmit}
5
- s.version = "0.2.2"
5
+ s.version = "1.0.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Joost Baaij"]
@@ -4,11 +4,9 @@ end
4
4
 
5
5
  Capistrano::Configuration.instance.load do
6
6
 
7
- _cset :user, ""
8
- _cset :db_config, { capture("cat #{current_path}/config/database.yml") }
9
- _cset :db_remote, { YAML::load(db_config)['production'] }
10
- _cset :db_local, { YAML::load_file("config/database.yml")['development'] }
11
- _cset :dumpfile, { "#{current_path}/tmp/#{db_remote['database']}.sql.gz" }
7
+ _cset :user, nil
8
+ _cset(:deploy_host) { find_servers(:roles => :db).first.host }
9
+ _cset(:dumpfile) { "#{current_path}/tmp/#{_db_remote['database']}.sql.gz" }
12
10
 
13
11
  after "transmit:get:mysql", "transmit:cleanup"
14
12
  after "transmit:put:mysql", "transmit:cleanup"
@@ -17,32 +15,62 @@ Capistrano::Configuration.instance.load do
17
15
  namespace :get do
18
16
  desc 'Fetch the remote production database and overwrite your local development database with it'
19
17
  task :mysql, :roles => :db do
20
- run "mysqldump --opt --quick --extended-insert --skip-lock-tables -u #{db_remote['username']} --password='#{db_remote['password']}' --host='#{db_remote['host']}' #{db_remote['database']} | gzip > #{dumpfile}"
18
+ run "mysqldump --opt --quick --extended-insert --skip-lock-tables #{_remote_db_auth} | gzip > #{dumpfile}"
21
19
 
22
- system "rsync -vP #{user}@#{deploy_host}:#{dumpfile} tmp/#{db_local["database"]}.sql.gz"
23
- system "gunzip < tmp/#{db_local["database"]}.sql.gz | mysql -u #{db_local['username']} --password='#{db_local['password']}' --host='#{db_local['host']}' #{db_local['database']}"
20
+ system "rsync -vP #{_user_with_host}:#{dumpfile} tmp/#{_db_local["database"]}.sql.gz"
21
+ system "gunzip < tmp/#{_db_local["database"]}.sql.gz | mysql #{_local_db_auth}"
24
22
  end
25
23
 
26
24
  desc 'Fetch the assets from the production server to the development environment'
27
25
  task :assets, :roles => :app do
28
- system "rsync -Lcrvz #{user}@#{deploy_host}:#{current_path}/public ."
26
+ system "rsync -Lcrvz #{_user_with_host}:#{current_path}/public ."
29
27
  end
30
28
  end
31
29
 
32
30
  namespace :put do
33
31
  desc 'Upload the local development database to the remote production database and overwrite it'
34
32
  task :mysql, :roles => :db do
35
- system "mysqldump --opt -u #{db_local['username']} --password='#{db_local['password']}' --host='#{db_local['host']}' #{db_local['database']} > tmp/#{db_local['database']}.sql"
33
+ system "mysqldump --opt #{_local_db_auth} > tmp/#{_db_local['database']}.sql"
36
34
 
37
- system "rsync -vP tmp/#{db_local['database']}.sql #{user}@#{deploy_host}:#{dumpfile}"
38
- run "mysql -u #{db_remote['username']} --password='#{db_remote['password']}' --host='#{db_remote['host']}' #{db_remote['database']} < #{dumpfile}"
35
+ system "rsync -vP tmp/#{_db_local['database']}.sql #{_user_with_host}:#{dumpfile}"
36
+ run "mysql #{_remote_db_auth} < #{dumpfile}"
39
37
  end
40
38
  end
41
39
 
42
40
  task :cleanup do
43
41
  run "rm #{dumpfile}"
44
- system "rm tmp/#{db_local['database']}.sql.gz"
42
+ system "rm tmp/#{_db_local['database']}.sql.gz"
45
43
  end
46
44
  end
47
45
 
46
+ # Return just the deploy host when user not set.
47
+ def _user_with_host
48
+ user.nil? ? deploy_host : "#{user}@#{deploy_host}"
49
+ end
50
+
51
+ # Output of the entire database.yml on the remote server.
52
+ def _db_config
53
+ @_db_config ||= capture("cat #{current_path}/config/database.yml")
54
+ end
55
+
56
+ # Production database configuration hash.
57
+ def _db_remote
58
+ @_db_remote ||= YAML::load(_db_config)['production']
59
+ end
60
+
61
+ # Development database configuration hash.
62
+ def _db_local
63
+ @_db_local ||= YAML::load_file("config/database.yml")['development']
64
+ end
65
+
66
+ # Complete remote database connection string.
67
+ def _remote_db_auth
68
+ @_remote_db_auth ||= "-u #{_db_remote['username']} --password='#{_db_remote['password']}' --host='#{_db_remote['host']}' #{_db_remote['database']}"
69
+ end
70
+
71
+ # Complete local database connection string.
72
+ def _local_db_auth
73
+ @_local_db_auth ||= "-u #{_db_local['username']} --password='#{_db_local['password']}' --host='#{_db_local['host']}' #{_db_local['database']}"
74
+ end
75
+
48
76
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: capistrano_transmit
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.2
5
+ version: 1.0.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Joost Baaij