pg_export 0.1.3 → 0.2.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: 161ed692783949b0244223c939a8d0619ebffdd7
4
- data.tar.gz: d0311270534576cff699df326e418cc470390f38
3
+ metadata.gz: 69622bfd641c2024a474d24d95c53e2baf552a2a
4
+ data.tar.gz: 7123b34af0f29d2b36b9690efb4b64afcdb60130
5
5
  SHA512:
6
- metadata.gz: 7e8a24fa7c67cdcfb1b1e304bfe6cd68cc5ed653ef858610d0b34d4eae82041e31ef2dd2b833be80bf4cb6a4222f732123093de29afdec97fdfa6f29cf5d5a8f
7
- data.tar.gz: 081942d1a37567873a72a5ad36387e644b7aa45fc8878e72f579da19da0e4f07e8f1bdf2a4d1e69f6d569bf969357d5a83ef4f06750e8c04e84ab2aaf14793cb
6
+ metadata.gz: 44241da6e0c062993be0990996cefeb784fe1bc9d2df71aa56743f262f123e8f6f8a068ee320e0a1d43922201cab3639e7f3aae46b748fceca38efa2ae1709bf
7
+ data.tar.gz: f69d004ff3a44aa4e014bf230f78ba9bd91445149736f412ec3ed13b5b1647a81f13f7f6d532c484d67cdce7fc2ee0982fcf482992c8d11a05822afd90edac6b
data/README.md CHANGED
@@ -1,9 +1,11 @@
1
1
  # PgExport
2
2
 
3
- CLI for exporting Rails Postgres database dump to FTP.
3
+ CLI for exporting PostgreSQL database dump to FTP.
4
4
 
5
5
  Can be used for backups or synchronizing databases between production and development environments.
6
6
 
7
+ Configurable by ENV variables and (partially) by command line options.
8
+
7
9
  ## Dependencies
8
10
 
9
11
  * Ruby >= 2.1
@@ -31,11 +33,57 @@ Or install it yourself as:
31
33
  $ pg_export -h
32
34
 
33
35
  Usage: pg_export [options]
36
+ -c, --configuration Prints the configuration
37
+ -f, --ftp Tries connecting to FTP to verify the connection
34
38
  -d, --database DATABASE [Required] Name of the database to export
35
39
  -k, --keep [KEEP] [Optional] Number of dump files to keep locally and on FTP (default: 10)
36
40
  -t, --timestamped [Optional] Enables log messages with timestamps
37
41
  -h, --help Show this message
38
42
 
43
+ ## How to start
44
+
45
+ __Step 1.__ Prepare FTP account and put configuration into env variables.
46
+
47
+ # /etc/enviranment
48
+ BACKUP_FTP_HOST="yourftp.example.com"
49
+ BACKUP_FTP_USER="user"
50
+ BACKUP_FTP_PASSWORD="password"
51
+
52
+ Password cannot include `#` sign, [more info](http://serverfault.com/questions/539730/environment-variable-in-etc-environment-with-pound-hash-sign-in-the-value).
53
+
54
+ __Step 2.__ Configure other variables (optional).
55
+
56
+ # /etc/environment
57
+ DUMPFILE_DIR="/var/dumps" # default: "tmp/dumps"
58
+ KEEP_DUMPS=3 # default: 10
59
+ KEEP_FTP_DUMPS=5 # default: 10
60
+
61
+ __Step 3.__ Print the configuration to verify if env variables has been loaded.
62
+
63
+ $ pg_export --configuration
64
+ => database:
65
+ dumpfile_dir: /var/dumps
66
+ keep_dumps: 3
67
+ keep_ftp_dumps: 5
68
+ ftp_host: yourftp.example.com
69
+ ftp_user: user
70
+ ftp_password: pass***
71
+
72
+ __Step 4.__ Try connecting to FTP to verify the connection.
73
+
74
+ $ pg_export --ftp
75
+ => Connect to yourftp.example.com
76
+ Close FTP
77
+
78
+ __Step 5.__ Perform database export.
79
+
80
+ $ pg_export -d your_database
81
+ => Dump your_database to /var/dumps/your_database_20161020_125747 (892.38kB)
82
+ Zip dump your_database_20161020_125747.gz (874.61kB)
83
+ Connect to yourftp.example.com
84
+ Export your_database_20161020_125747.gz to FTP
85
+ Close FTP
86
+
39
87
  ## Development
40
88
 
41
89
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/bin/pg_export CHANGED
@@ -23,10 +23,23 @@ option_parser = OptionParser.new do |opts|
23
23
  options.timestamped = true
24
24
  end
25
25
 
26
- opts.on_tail('-h', '--help', 'Show this message') do
26
+ opts.on('-h', '--help', 'Show this message') do
27
27
  puts opts
28
28
  exit
29
29
  end
30
+
31
+ opts.separator "\nSetting can be verified by running following commands:"
32
+
33
+ opts.on('-c', '--configuration', 'Prints the configuration') do
34
+ puts PgExport::Configuration.new.to_s
35
+ exit
36
+ end
37
+
38
+ opts.on('-f', '--ftp', 'Tries connecting to FTP to verify the connection') do
39
+ PgExport::Logging.logger.formatter = LOGS_NORMAL
40
+ PgExport::FtpService.new(PgExport::Configuration.new.ftp_params)
41
+ exit
42
+ end
30
43
  end
31
44
 
32
45
  begin
@@ -42,4 +55,6 @@ begin
42
55
  rescue OptionParser::MissingArgument, PgExport::InvalidConfigurationError => e
43
56
  puts "Error: #{e}"
44
57
  puts option_parser
58
+ rescue PgExport::DatabaseDoesNotExistError, PgExport::DependencyRequiredError => e
59
+ puts e
45
60
  end
@@ -19,13 +19,13 @@ class PgExport
19
19
 
20
20
  def validate_pg_dump_exists
21
21
  out = `pg_dump -V`
22
- /pg_dump \(PostgreSQL\)/ =~ out or raise DependencyRequiredError, 'pg_dump is required'
22
+ /pg_dump \(PostgreSQL\)/ =~ out or raise DependencyRequiredError, 'Shell command "pg_dump" is required. Pleas install "pg_dump" and try again.'
23
23
  end
24
24
 
25
25
  def validate_db_exists(database)
26
26
  PG.connect(dbname: database)
27
27
  rescue PG::ConnectionBad => e
28
- raise DatabaseDoesNotExistError, e.to_s
28
+ raise DatabaseDoesNotExistError, e
29
29
  end
30
30
 
31
31
  def execute_dump_command
@@ -31,5 +31,23 @@ class PgExport
31
31
  password: ftp_password
32
32
  }
33
33
  end
34
+
35
+ def to_s
36
+ DEFAULTS.keys.map(&method(:print_attr))
37
+ end
38
+
39
+ private
40
+
41
+ def print_attr(key)
42
+ if key == :ftp_password
43
+ if send(key)
44
+ "#{key}: #{send(key)[0..2]}***\n"
45
+ else
46
+ "#{key}:\n"
47
+ end
48
+ else
49
+ "#{key}: #{send(key)}\n"
50
+ end
51
+ end
34
52
  end
35
53
  end
@@ -1,3 +1,3 @@
1
1
  class PgExport
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
data/lib/pg_export.rb CHANGED
@@ -22,26 +22,36 @@ class PgExport
22
22
  @config = Configuration.new
23
23
  yield config if block_given?
24
24
  config.validate
25
- @dump = Dump.new(config.database, config.dumpfile_dir)
26
- end
27
-
28
- def initialize_ftp_service
29
- self.ftp_service = FtpService.new(config.ftp_params)
30
25
  end
31
26
 
32
27
  def call
33
- t = []
34
- t << Thread.new { perform_local_job }
35
- t << Thread.new { initialize_ftp_service }
36
- t.each(&:join)
28
+ initialize_dump
29
+ concurrently do |job|
30
+ job << Thread.new { perform_local_job }
31
+ job << Thread.new { initialize_ftp_service }
32
+ end
37
33
  perform_ftp_job
38
34
  self
39
35
  end
40
36
 
41
37
  private
42
38
 
43
- attr_reader :config, :dump
44
- attr_accessor :ftp_service
39
+ attr_reader :config
40
+ attr_accessor :ftp_service, :dump
41
+
42
+ def initialize_dump
43
+ self.dump = Dump.new(config.database, config.dumpfile_dir)
44
+ end
45
+
46
+ def initialize_ftp_service
47
+ self.ftp_service = FtpService.new(config.ftp_params)
48
+ end
49
+
50
+ def concurrently
51
+ t = []
52
+ yield t
53
+ t.each(&:join)
54
+ end
45
55
 
46
56
  def perform_local_job
47
57
  CreateDump.new(dump).call
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_export
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Maicher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-19 00:00:00.000000000 Z
11
+ date: 2016-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg