capistrano_misc_recipes 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Capistrano Misc Recipies
1
+ # Capistrano Misc Recipes
2
2
 
3
3
  This gem provides several capistrano tasks to help to access rails application environment and log files.
4
4
 
@@ -1,4 +1,4 @@
1
- # Recipes for run somoe useful command on server
1
+ # Recipes for run somoe useful console commands on server
2
2
 
3
3
  module Capistrano
4
4
  module Console
@@ -0,0 +1,57 @@
1
+ module CapistranoMiscRecipes
2
+ module DbDump
3
+ def DbDump.command options
4
+ dump_file, dump_command = options['dump_file'], []
5
+
6
+ case options["adapter"]
7
+ when /^mysql/
8
+ args = {
9
+ 'host' => '--host',
10
+ 'port' => '--port',
11
+ 'socket' => '--socket',
12
+ 'username' => '--user',
13
+ 'encoding' => '--default-character-set',
14
+ 'sslca' => '--ssl-ca',
15
+ 'sslcert' => '--ssl-cert',
16
+ 'sslcapath' => '--ssl-capath',
17
+ 'sslcipher' => '--ssh-cipher',
18
+ 'sslkey' => '--ssl-key'
19
+ }.map { |opt, arg| "#{arg}=#{options[opt]}" if options[opt] }.compact
20
+
21
+ if options['password'] && !options['password'].to_s.empty?
22
+ args << "--password=#{options['password']}"
23
+ end
24
+
25
+ args << options['database']
26
+ dump_command << 'mysqldump' << args
27
+
28
+ when /^postgres/
29
+ args = {
30
+ 'host' => '--host',
31
+ 'port' => '--port',
32
+ 'username' => '--user',
33
+ 'encoding' => '--encoding',
34
+ }.map { |opt, arg| "#{arg}=#{options[opt]}" if options[opt] }.compact
35
+
36
+ args << options['database']
37
+ dump_command << "pg_dump --clean --no-owner" << args
38
+ # TODO password
39
+
40
+ else
41
+ abort "Unknown command-line client for #{options['database']}"
42
+ end
43
+
44
+ case options['pack']
45
+ when 'bzip2' ; dump_command << '| bzip2 -c'
46
+ when 'gzip' ; dump_command << '| gzip'
47
+ end
48
+
49
+ dump_command << '>'
50
+
51
+ dump_command << dump_file
52
+ dump_command = dump_command.join ' '
53
+
54
+ return dump_command
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,37 @@
1
+ # Recipe for fetch db dump from server
2
+
3
+ require 'yaml'
4
+ require 'erb'
5
+ require 'capistrano_misc_recipes/db_dump'
6
+
7
+ module Capistrano
8
+ module Console
9
+ Configuration.instance(true).load do
10
+
11
+ desc 'fetch db dump from the server'
12
+ task :dbfetch, roles: :db, only: { primary: true } do
13
+
14
+ # TODO extract main loginc to lib to reuse in rake task
15
+
16
+ database_yml = capture "cat #{current_path}/config/database.yml"
17
+ config = begin
18
+ YAML.load(ERB.new(database_yml).result)[rails_env]
19
+ rescue
20
+ # TODO error report if database.yml not exists unreachable!
21
+ end
22
+
23
+ dump_file = "/tmp/#{ capture("hostname").chomp }-#{ config['database'] }-#{ Time.now.strftime('%Y-%m-%d-%H-%M-%S') }.sql.bz2"
24
+
25
+ on_rollback { run "rm -f #{dump_file}" }
26
+
27
+ dump_command = ::CapistranoMiscRecipes::DbDump.command(config.merge 'dump_file' => dump_file, 'pack' => 'bzip2' )
28
+
29
+ puts dump_command
30
+ run dump_command
31
+ download dump_file, File.basename(dump_file)
32
+ run "rm -f #{dump_file}"
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,50 @@
1
+ require 'rake'
2
+ require 'capistrano_misc_recipes/db_dump'
3
+
4
+ namespace :db do
5
+
6
+ # optinoal parametrs
7
+ # store_path - path to store dump file
8
+ # dump_file - file name
9
+ # without_timestamp - skip adding time stamp to file name if set to 'y'
10
+ # ignore_tables - do not dump given tables
11
+
12
+ desc 'native SQL dump of database defined in config/database.yml for the current RAILS_ENV'
13
+ task :sqldump => :environment do
14
+ dump_database
15
+ end
16
+
17
+ namespace :sqldump do
18
+ desc 'packed with gzip native SQL dump of database defined in config/database.yml for the current RAILS_ENV'
19
+ task :gzip => :environment do
20
+ dump_database 'gzip'
21
+ end
22
+
23
+ desc 'packed with bzip2 native SQL dump of database defined in config/database.yml for the current RAILS_ENV'
24
+ task :bzip2 => :environment do
25
+ dump_database 'bzip2'
26
+ end
27
+ end
28
+
29
+ def dump_database pack=nil
30
+ config = ActiveRecord::Base.configurations[Rails.env]
31
+
32
+ raise "Destination directory do not exists" if !ENV['store_path'].blank? && !File.exists?(File.expand_path(ENV['store_path']))
33
+
34
+ store_path = !ENV['store_path'].blank? ? File.expand_path(ENV['store_path']) : '.'
35
+ dump_file = !ENV['dump_file'].blank? ? ENV['dump_file'].dup : "#{`hostname`.chomp}-#{config['database']}"
36
+ dump_file << '-' + Time.now.strftime('%Y-%m-%d-%H-%M-%S') unless !ENV['without_timestamp'].blank? && ENV['without_timestamp'].downcase == 'y'
37
+ dump_file << '.sql'
38
+
39
+ case pack
40
+ when 'gzip' ; dump_file << '.gz'
41
+ when 'bzip2' ; dump_file << '.bz2'
42
+ end
43
+ file = File.expand_path(File.join(store_path, dump_file))
44
+
45
+ command = ::CapistranoMiscRecipes::DbDump.command config.merge('pack' => pack, 'dump_file' => dump_file)
46
+
47
+ puts command
48
+ system command
49
+ end
50
+ end
@@ -1,3 +1,3 @@
1
1
  module CapistranoMiscRecipes
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1 @@
1
+ require 'capistrano_misc_recipes/tasks'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano_misc_recipes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-20 00:00:00.000000000 Z
12
+ date: 2013-06-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
@@ -74,7 +74,11 @@ files:
74
74
  - README.md
75
75
  - Rakefile
76
76
  - capistrano_misc_recipes.gemspec
77
+ - lib/capistrano_misc_recipes.rb
77
78
  - lib/capistrano_misc_recipes/console.rb
79
+ - lib/capistrano_misc_recipes/db_dump.rb
80
+ - lib/capistrano_misc_recipes/dbfetch.rb
81
+ - lib/capistrano_misc_recipes/tasks.rb
78
82
  - lib/capistrano_misc_recipes/version.rb
79
83
  homepage: http://github.com/corlinus/capistrano_misc_recipes
80
84
  licenses:
@@ -91,7 +95,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
91
95
  version: '0'
92
96
  segments:
93
97
  - 0
94
- hash: -3445679172462946187
98
+ hash: 873591735516740147
95
99
  required_rubygems_version: !ruby/object:Gem::Requirement
96
100
  none: false
97
101
  requirements:
@@ -100,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
104
  version: '0'
101
105
  segments:
102
106
  - 0
103
- hash: -3445679172462946187
107
+ hash: 873591735516740147
104
108
  requirements: []
105
109
  rubyforge_project:
106
110
  rubygems_version: 1.8.25