capistrano-shortcuts 0.4.0 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2208a9dbae3d5ae54c9a4682033cbc92d13a7347
4
- data.tar.gz: 53d1cd456f3b19705f32ef7feb3e9834609d1bd8
3
+ metadata.gz: 26d6a4fd1a79734018fac7c509788b79de96b122
4
+ data.tar.gz: e99f5f9d66e655427e38e5068fc2851f935b728d
5
5
  SHA512:
6
- metadata.gz: 0efc360b45c570c510629974bf496ef31ed369af7c94e3f0711b8567407c2eb2e030beab667b9a121b22727ef8a40d82615ec4bf61523c39866a2dd1afbf24da
7
- data.tar.gz: 42784ec533275a5f5d525902fcd6a1e40d31c010b9f53b51724d78186f8105956c676b74e0c5a69694f6dbb5f9e7c4a69f9d9bb9f84858d44f6d5620c7fd9fcc
6
+ metadata.gz: e37d55cd40c998122e5fbccd61c1d2f79e98b88065cab93d4c4770b52300d339cecd44a57ce91af93aaed466a333f242e24b00b4b9dbb1ffc4b6f5b74ea6b661
7
+ data.tar.gz: c5279826670b579516e87e2115cc88d19396c845a343b3af1bb9a5255f21207ebdc4d44c0ed67ed1871081674888dabad824ef2026c69e2603f861efefd30fbd
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- capistrano-shortcuts (0.4.0)
4
+ capistrano-shortcuts (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -25,6 +25,18 @@ And include the tasks via your Capfile:
25
25
 
26
26
  require 'capistrano/shortcuts'
27
27
 
28
+
29
+ ## MySQL Database Tasks
30
+
31
+ Push or pull a copy of the database to or from the environment:
32
+
33
+ cap <environment> db:pull
34
+ cap <environment> db:push
35
+
36
+ Pull a copy of the production database to local machine, run migrations to update to development mode, then push the fresh and updated version to staging:
37
+
38
+ cap <environment> db:sync
39
+
28
40
  ## Config Files
29
41
 
30
42
  Push all config files listed in the :linked_files variable to the specified environment:
@@ -1,6 +1,6 @@
1
1
  require "capistrano/shortcuts/version"
2
2
 
3
- [:apache, :config, :memcache, :web].each do |token|
3
+ [:apache, :config, :database, :memcache, :web].each do |token|
4
4
  load File.expand_path("../shortcuts/tasks/deploy_#{token}.rake", __FILE__)
5
5
  end
6
6
 
@@ -0,0 +1,111 @@
1
+ production_protected = true
2
+
3
+ namespace :db do
4
+
5
+ db_config = YAML::load_file('config/database.yml')
6
+ local_rails_env = 'development'
7
+ dump_file = "capistrano-dump.sql"
8
+
9
+ task pull: [:dump_remote_db, :pull_db, :load_local_db]
10
+ task push: [:dump_local_db, :push_db, :load_remote_db]
11
+
12
+ task :dump_remote_db do
13
+ on roles(:db) do
14
+ dump_db(db_config[fetch(:rails_env)], dump_file)
15
+ end
16
+ end
17
+
18
+ task :pull_db do
19
+ on roles(:db) do
20
+ run_locally do
21
+ if db_config[fetch(:rails_env)]['host'].nil?
22
+ domain = fetch(:domain)
23
+ else
24
+ domain = db_config[fetch(:rails_env)]['host']
25
+ end
26
+ execute("scp -i #{fetch(:aws_key_pair)} #{fetch(:user)}@#{domain}:~/#{dump_file}.gz .")
27
+ end
28
+ execute("rm #{dump_file}.gz")
29
+ run_locally do
30
+ execute("gunzip -f #{dump_file}.gz")
31
+ end
32
+ end
33
+ end
34
+
35
+ task :load_local_db do
36
+ run_locally do
37
+ load_db(db_config[local_rails_env], dump_file)
38
+ execute("rm #{dump_file}")
39
+ end
40
+ end
41
+
42
+ task :dump_local_db do
43
+ run_locally do
44
+ dump_db(db_config[local_rails_env], dump_file)
45
+ end
46
+ end
47
+
48
+ task :push_db do
49
+ if production_protected and fetch(:rails_env) == 'production'
50
+ raise "Sorry, I refuse to push the local database to production."
51
+ end
52
+ run_locally do
53
+ if db_config[fetch(:rails_env)]['host'].nil?
54
+ domain = fetch(:domain)
55
+ else
56
+ domain = db_config[fetch(:rails_env)]['host']
57
+ end
58
+
59
+ execute("scp -i #{fetch(:aws_key_pair)} #{dump_file}.gz #{fetch(:user)}@#{domain}:~")
60
+ execute("rm #{dump_file}.gz")
61
+ end
62
+ on roles(:db) do
63
+ execute("gunzip -f #{dump_file}.gz")
64
+ end
65
+ end
66
+
67
+ task :load_remote_db do
68
+ if production_protected and fetch(:rails_env) == 'production'
69
+ raise "Sorry, I won't load the remote database on production."
70
+ end
71
+ on roles(:db) do
72
+ load_db(db_config[fetch(:rails_env)], "~/#{dump_file}")
73
+ execute("rm #{dump_file}")
74
+ end
75
+ end
76
+
77
+ def dump_db(config, output_file)
78
+ execute("MYSQL_PWD=#{config['password']} " +
79
+ "mysqldump -f " +
80
+ "-u #{config['username']} " +
81
+ "#{config['database']} " +
82
+ "-r #{output_file}")
83
+ execute("gzip -f #{output_file}")
84
+ end
85
+
86
+ def load_db(config, input_file)
87
+ execute("MYSQL_PWD=#{config['password']} " +
88
+ "mysql " +
89
+ "-u #{config['username']} " +
90
+ "#{config['database']} " +
91
+ "< #{input_file}")
92
+ end
93
+
94
+ # task :backup do
95
+ # on roles(:db) do
96
+ # dump_file = "cap-backup-#{Time.now.to_i}.sql"
97
+ # execute("mysqldump " +
98
+ # "-u #{db_config[fetch(:rails_env)]['username']} " +
99
+ # "-h #{db_config[fetch(:rails_env)]['host']} " +
100
+ # "-p " +
101
+ # "#{db_config[fetch(:rails_env)]['database']} " +
102
+ # "> #{dump_file}") do |ch, _, out|
103
+ # if out =~ /^Enter password: /
104
+ # ch.send_data "#{db_config[fetch(:rails_env)]['password']}\n"
105
+ # else
106
+ # puts out
107
+ # end
108
+ # end
109
+ # end
110
+ # end
111
+ end
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Shortcuts
3
- VERSION = "0.4.0"
3
+ VERSION = "0.5.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-shortcuts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Gehman
@@ -57,6 +57,7 @@ files:
57
57
  - lib/capistrano/shortcuts.rb
58
58
  - lib/capistrano/shortcuts/tasks/deploy_apache.rake
59
59
  - lib/capistrano/shortcuts/tasks/deploy_config.rake
60
+ - lib/capistrano/shortcuts/tasks/deploy_database.rake
60
61
  - lib/capistrano/shortcuts/tasks/deploy_memcache.rake
61
62
  - lib/capistrano/shortcuts/tasks/deploy_web.rake
62
63
  - lib/capistrano/shortcuts/version.rb