effective_developer 0.4.14 → 0.5.2

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
  SHA256:
3
- metadata.gz: 33e92fc9bd9a51a447bd0128b11463ac1e06c854389e1e996872c5f012b02e47
4
- data.tar.gz: 87049e6643aaa2235639729e97d93d48f642827a53a9cefe8aab34b1d206ea1e
3
+ metadata.gz: 0deae13cd4fb9d39c7108dbe297cbccce12e308dc8510f4f974c634a7d4045ee
4
+ data.tar.gz: 575191ece3ae021c25de70db77066cc0893cd7713707a63f1b700586c1a4b547
5
5
  SHA512:
6
- metadata.gz: 67119ab7a04b64551565dacc737a8bf95eb06793c0bab5fbd6bf26b3e8f2afc7a62e4c2e686b4b48f55db477f86e70147a1ab3d30f9c7b13b21b36a403a60bf8
7
- data.tar.gz: 6908000780ca6d53f58dd21ca7a6cf15f757113db5e27e8b2aaa6ef4ae09c15efb60a5965b50c03801c28e4fb9751074dea193c1445d6880df2499820304bcb4
6
+ metadata.gz: 103153bf5fe52387af807cb90b2855f17bfc490af84e2f1b7dcb058deac2b1e1901c5feb04a00119f66ad51db9363f44ad2224d346c570a251711f45143742c1
7
+ data.tar.gz: b9b6041460328adad3dc4910f0548171a35fd89a1b518d8a515f18740f8238f6db62629a8ef5d7530babe3677799d409f44129a86651a89af7b9d8edca4a3094
@@ -1,3 +1,3 @@
1
1
  module EffectiveDeveloper
2
- VERSION = '0.4.14'.freeze
2
+ VERSION = '0.5.2'.freeze
3
3
  end
@@ -1,29 +1,65 @@
1
1
  namespace :pg do
2
- # Creates a new backup on heroku, downloads that backup to latest.dump, and then calls pg:load
2
+ # Creates a new backup on remote server, downloads that backup to latest.dump, and then calls pg:load
3
3
  #
4
4
  # bundle exec rake pg:pull
5
5
  # bundle exec rake pg:pull[staging]
6
- desc 'Pulls a newly captured backup from heroku (--remote heroku by default) and calls pg:load'
6
+ # bundle exec rake pg:pull[158.204.33.124]
7
+ desc 'Creates a new backup on remote server and downloads it to latest.dump'
7
8
  task :pull, [:remote] => :environment do |t, args|
8
- args.with_defaults(:remote => 'heroku')
9
9
 
10
- puts "=== Pulling remote '#{args.remote}' database into latest.dump"
10
+ # Heroku mode
11
+ if `git remote -v | grep heroku`.length > 0
12
+ args.with_defaults(remote: 'heroku')
11
13
 
12
- Bundler.with_clean_env do
14
+ puts "=== Pulling remote '#{args.remote}' database into latest.dump"
15
+
16
+ # Create a backup on heroku
13
17
  unless system("heroku pg:backups:capture --remote #{args.remote}")
14
- puts "Error capturing heroku backup"
15
- exit
18
+ abort("Error capturing heroku backup")
19
+ end
20
+
21
+ # Download it to local
22
+ unless system("curl -o latest.dump `heroku pg:backups:public-url --remote #{args.remote}`")
23
+ abort("Error downloading database")
24
+ end
25
+
26
+ # Load it
27
+ Rake::Task['pg:load'].invoke
28
+ exit
29
+ end
30
+
31
+ # Hatchbox mode
32
+ if (ENV['HATCHBOX_IP'] || args[:remote]).count('.') == 3
33
+ args.with_defaults(
34
+ remote: ENV.fetch('HATCHBOX_IP'),
35
+ app: ENV['HATCHBOX_APP'] || `pwd`.split('/').last.chomp,
36
+ user: ENV['HATCHBOX_USER'] || 'deploy'
37
+ )
38
+
39
+ puts "=== Pulling hatchbox '#{args.remote}' #{args.app} database into latest.dump"
40
+
41
+ # SSH into hatchbox and call rake pg:save there to create latest.dump
42
+ unless(result = `ssh #{args.user}@#{args.remote} << EOF
43
+ cd ~/#{args.app}/current/
44
+ bundle exec rake pg:save[latest.dump]
45
+ `).include?('Saving database completed') # The output of pg:save down below
46
+ puts("Error calling ssh #{args.user}@#{args.remote} and running rake pg:save on hatchbox from ~/#{args.app}/current/")
47
+ abort(result)
16
48
  end
17
49
 
18
- if system("curl -o latest.dump `heroku pg:backups:public-url --remote #{args.remote}`")
19
- puts "Downloading database completed"
20
- else
21
- puts "Error downloading database"
22
- exit
50
+ # SCP to copy the hatchkbox latest.dump to local
51
+ unless system("scp #{args.user}@#{args.remote}:~/#{args.app}/current/latest.dump ./")
52
+ abort("Error downloading database")
23
53
  end
54
+
55
+ # Load it
56
+ Rake::Task['pg:load'].invoke
57
+ exit
24
58
  end
25
59
 
26
- Rake::Task['pg:load'].invoke
60
+ puts "Unable to find pg:pull provider."
61
+ puts "Please add a heroku git remote or a HATCHBOX_IP environment variable and try again"
62
+ abort
27
63
  end
28
64
 
29
65
  # Drops and re-creates the local database then initializes database with latest.dump
@@ -33,9 +69,11 @@ namespace :pg do
33
69
  desc 'Loads a postgresql .dump file into the development database (latest.dump by default)'
34
70
  task :load, [:file_name] => :environment do |t, args|
35
71
  args.with_defaults(:file_name => 'latest.dump')
36
- db = ActiveRecord::Base.configurations[Rails.env]
37
72
 
38
- puts "=== Loading #{args.file_name} into local '#{db['database']}' database"
73
+ config = ActiveRecord::Base.configurations[Rails.env]
74
+ db = { username: (config['username'] || `whoami`), password: config['password'], host: config['host'], port: (config['port'] || 5432), database: config['database'] }
75
+
76
+ puts "=== Loading #{args.file_name} into local '#{db[:database]}' database"
39
77
 
40
78
  # bin/rails db:environment:set RAILS_ENV=development
41
79
  if Rails.env != 'production'
@@ -45,10 +83,10 @@ namespace :pg do
45
83
  Rake::Task['db:drop'].invoke
46
84
  Rake::Task['db:create'].invoke
47
85
 
48
- if system("pg_restore --no-acl --no-owner --clean --if-exists -h localhost -U #{db['username']} -d #{db['database']} #{args.file_name}")
86
+ if system("export PGPASSWORD=#{db[:password]}; pg_restore --no-acl --no-owner --clean --if-exists -h #{db[:host]} -U #{db[:username]} -d #{db[:database]} #{args.file_name}")
49
87
  puts "Loading database completed"
50
88
  else
51
- puts "Error loading database"
89
+ abort "Error loading database"
52
90
  end
53
91
  end
54
92
 
@@ -57,14 +95,23 @@ namespace :pg do
57
95
  desc 'Saves the development database to a postgresql .dump file (latest.dump by default)'
58
96
  task :save, [:file_name] => :environment do |t, args|
59
97
  args.with_defaults(:file_name => 'latest.dump')
60
- db = ActiveRecord::Base.configurations[Rails.env]
61
98
 
62
- puts "=== Saving local '#{db['database']}' database to #{args.file_name}"
99
+ db = if ENV['DATABASE_URL'].to_s.length > 0
100
+ uri = URI.parse(ENV['DATABASE_URL']) rescue nil
101
+ abort("Invalid DATABASE_URL") unless uri.present?
63
102
 
64
- if system("pg_dump -Fc --no-acl --no-owner -h localhost -U '#{db['username']}' '#{db['database']}' > #{args.file_name}")
103
+ { username: uri.user, password: uri.password, host: uri.host, port: (uri.port || 5432), database: uri.path.sub('/', '') }
104
+ else
105
+ config = ActiveRecord::Base.configurations[Rails.env]
106
+ { username: (config['username'] || `whoami`.chomp), password: config['password'], host: config['host'], port: (config['port'] || 5432), database: config['database'] }
107
+ end
108
+
109
+ puts "=== Saving local '#{db[:database]}' database to #{args.file_name}"
110
+
111
+ if system("export PGPASSWORD=#{db[:password]}; pg_dump -Fc --no-acl --no-owner -h #{db[:host]} -p #{db[:port]} -U #{db[:username]} #{db[:database]} > #{args.file_name}")
65
112
  puts "Saving database completed"
66
113
  else
67
- puts "Error saving database"
114
+ abort "Error saving database"
68
115
  end
69
116
  end
70
117
 
@@ -77,20 +124,17 @@ namespace :pg do
77
124
 
78
125
  Bundler.with_clean_env do
79
126
  unless system("heroku pg:backups:capture --remote #{args.source_remote}")
80
- puts "Error capturing heroku backup"
81
- exit
127
+ abort "Error capturing heroku backup"
82
128
  end
83
129
 
84
130
  url = (`heroku pg:backups:public-url --remote #{args.source_remote}`).chomp
85
131
 
86
132
  unless (url || '').length > 0
87
- puts "Error reading public-url from remote #{args.source_remote}"
88
- exit
133
+ abort "Error reading public-url from remote #{args.source_remote}"
89
134
  end
90
135
 
91
136
  unless system("heroku pg:backups:restore '#{url}' DATABASE_URL --remote #{args.target_remote}")
92
- puts "Error cloning heroku backup"
93
- exit
137
+ abort "Error cloning heroku backup"
94
138
  end
95
139
  end
96
140
 
@@ -102,7 +146,7 @@ namespace :pg do
102
146
  args.with_defaults(:remote => 'heroku')
103
147
 
104
148
  if args.table.blank?
105
- puts "Error, no table name specified. Expected usage: rake pg:push_table[prices]"; exit
149
+ abort "Error, no table name specified. Expected usage: rake pg:push_table[prices]"
106
150
  end
107
151
 
108
152
  # Find and parse my heroku database info
@@ -113,14 +157,14 @@ namespace :pg do
113
157
  if info.blank? || info.length != 6
114
158
  puts "Unable to find heroku DATABASE_URL"
115
159
  puts "Expected \"heroku config --remote #{args.remote} | grep DATABASE_URL\" to be present"
116
- exit
160
+ abort
117
161
  end
118
162
 
119
163
  heroku = { username: info[1], password: info[2], host: info[3], port: info[4], database: info[5] }
120
164
 
121
165
  # Confirm destructive operation
122
166
  puts "WARNING: this task will overwrite the #{args.table} database table on #{args.remote}. Proceed? (y/n)"
123
- (puts 'Aborted' and exit) unless STDIN.gets.chomp.downcase == 'y'
167
+ abort('Aborted') unless STDIN.gets.chomp.downcase == 'y'
124
168
 
125
169
  puts "=== Cloning local table '#{args.table}' to remote #{args.remote} database"
126
170
 
@@ -129,7 +173,7 @@ namespace :pg do
129
173
  tmpfile = "tmp/#{args.table}.sql"
130
174
 
131
175
  unless system("pg_dump --data-only --table=#{args.table} -h localhost -U '#{db['username']}' '#{db['database']}' > #{tmpfile}")
132
- puts "Error dumping local database table"; exit
176
+ abort "Error dumping local database table"
133
177
  end
134
178
 
135
179
  # Now restore it to heroku
@@ -137,11 +181,11 @@ namespace :pg do
137
181
  delete = args.table.split(',').map { |table| "DELETE FROM #{table}" }.join(';')
138
182
 
139
183
  unless system("#{psql} -c \"#{delete}\"")
140
- puts "Error deleting remote table data"; exit
184
+ abort "Error deleting remote table data"
141
185
  end
142
186
 
143
187
  unless system("#{psql} < #{tmpfile}")
144
- puts "Error pushing table to remote database"; exit
188
+ abort "Error pushing table to remote database"
145
189
  end
146
190
 
147
191
  # Delete tmpfile
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_developer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.14
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-05 00:00:00.000000000 Z
11
+ date: 2020-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
118
  - !ruby/object:Gem::Version
119
119
  version: '0'
120
120
  requirements: []
121
- rubygems_version: 3.0.3
121
+ rubygems_version: 3.1.2
122
122
  signing_key:
123
123
  specification_version: 4
124
124
  summary: Provides some quality of life developer tools.