heroku_pg_loader 0.0.1
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 +7 -0
- data/bin/heroku_pg_load +5 -0
- data/lib/heroku_pg_loader.rb +118 -0
- metadata +48 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a6cf49270202e1edc2a5ca3f0858eef8cf6ee294
|
4
|
+
data.tar.gz: ab6a2255562156f612d9e2795c0e853b512fc178
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 56f6d0cef29e38ef5f9850bf25a32edcfef3295f834b38c2a437e069a2e571980c9a5c9d08314c8dca877053b276b10a625e42c3ef21ed194a5171892f2900d7
|
7
|
+
data.tar.gz: 494c4f30fcd70433f76d332350ab43bf1ec6c7625eb0b8a3a744926950778f0b677f5cd8e8c1361468a0bc4bcbf0d9009f6fd2064ba8e46ac17bc279c311fc88
|
data/bin/heroku_pg_load
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'uri'
|
3
|
+
|
4
|
+
class HerokuPgLoader
|
5
|
+
|
6
|
+
def start
|
7
|
+
begin
|
8
|
+
get_app_name
|
9
|
+
get_development_database
|
10
|
+
|
11
|
+
load_database
|
12
|
+
|
13
|
+
|
14
|
+
rescue Exception => e
|
15
|
+
puts "Error: #{e}"
|
16
|
+
ensure
|
17
|
+
dump_file.close
|
18
|
+
dump_file.delete
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def get_url_contents(url_string)
|
25
|
+
require 'open-uri'
|
26
|
+
open(url_string).read
|
27
|
+
end
|
28
|
+
|
29
|
+
def load_database
|
30
|
+
run_command "heroku pgbackups:capture --app #{@heroku_app_name} --expire"
|
31
|
+
|
32
|
+
heroku_backup_url = run_command "heroku pgbackups:url --app #{@heroku_app_name}"
|
33
|
+
|
34
|
+
puts "Dumping to: #{dump_file.path}"
|
35
|
+
|
36
|
+
dump_file.write get_url_contents(heroku_backup_url)
|
37
|
+
|
38
|
+
run_command "echo \"DROP DATABASE #{@db_name}; CREATE DATABASE #{@db_name};\" | psql -U #{@db_username} -d postgres"
|
39
|
+
|
40
|
+
run_command "pg_restore --verbose --clean --no-acl --no-owner -h 127.0.0.1 -U #{@db_username} -d #{@db_name} #{dump_file.path}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def dump_file
|
44
|
+
if @dump_file.nil?
|
45
|
+
path = "#{working_dir}/latest.dump"
|
46
|
+
puts "Creating dump file #{path}"
|
47
|
+
@dump_file = File.open(path, 'w')
|
48
|
+
end
|
49
|
+
@dump_file
|
50
|
+
end
|
51
|
+
|
52
|
+
def run_command(command)
|
53
|
+
puts "[Running] #{command}"
|
54
|
+
output = `#{command}`; result = $?.success?
|
55
|
+
raise "Error" unless result
|
56
|
+
|
57
|
+
output
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_development_database
|
61
|
+
|
62
|
+
# Read database.yml
|
63
|
+
db_config = YAML.load_file("#{working_dir}/config/database.yml")
|
64
|
+
|
65
|
+
dev_config = db_config["development"]
|
66
|
+
if dev_config["adapter"] == "postgresql"
|
67
|
+
@db_name = dev_config["database"]
|
68
|
+
@db_username = dev_config["username"]
|
69
|
+
@db_password = dev_config["password"]
|
70
|
+
end
|
71
|
+
|
72
|
+
@db_name = prompt "Local Database Name:\n (WARNING: THIS DATABASE WILL BE ERASED)",
|
73
|
+
@db_name,
|
74
|
+
"Database name not entered"
|
75
|
+
|
76
|
+
@db_username = prompt "Database Username:",
|
77
|
+
@db_username,
|
78
|
+
"Database username not entered"
|
79
|
+
|
80
|
+
@db_password = prompt "Database Password:",
|
81
|
+
@db_password,
|
82
|
+
"Database Password not entered"
|
83
|
+
end
|
84
|
+
|
85
|
+
def working_dir
|
86
|
+
File.expand_path File.dirname(__FILE__)
|
87
|
+
end
|
88
|
+
|
89
|
+
def prompt(message, current_value, error_message)
|
90
|
+
puts "#{message} [#{current_value}]"
|
91
|
+
print ">"
|
92
|
+
input = gets.chomp
|
93
|
+
current_value = input if input != ""
|
94
|
+
raise error_message if current_value.nil?
|
95
|
+
|
96
|
+
current_value
|
97
|
+
end
|
98
|
+
|
99
|
+
def get_app_name
|
100
|
+
detect_app_name
|
101
|
+
|
102
|
+
@heroku_app_name = prompt "Heroku App Name:",
|
103
|
+
@heroku_app_name,
|
104
|
+
"No Heroku App Name entered"
|
105
|
+
end
|
106
|
+
|
107
|
+
def detect_app_name
|
108
|
+
git_remote = `git remote -v | grep heroku`
|
109
|
+
|
110
|
+
/git@heroku.com:(\w*).git/.match(git_remote)
|
111
|
+
@heroku_app_name = $1
|
112
|
+
|
113
|
+
if @heroku_app_name
|
114
|
+
puts "Heroku App Detected: #{@heroku_app_name}"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: heroku_pg_loader
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gerry Eng
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-10-26 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A simple gem toload your Heroku Postgres production database into a local
|
14
|
+
database
|
15
|
+
email: m@gerryeng.com
|
16
|
+
executables:
|
17
|
+
- heroku_pg_load
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/heroku_pg_loader.rb
|
22
|
+
- bin/heroku_pg_load
|
23
|
+
homepage: http://gerryeng.com
|
24
|
+
licenses:
|
25
|
+
- MIT
|
26
|
+
metadata: {}
|
27
|
+
post_install_message:
|
28
|
+
rdoc_options: []
|
29
|
+
require_paths:
|
30
|
+
- lib
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - '>='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
requirements: []
|
42
|
+
rubyforge_project:
|
43
|
+
rubygems_version: 2.0.3
|
44
|
+
signing_key:
|
45
|
+
specification_version: 4
|
46
|
+
summary: A simple gem to load your Heroku Postgres production database into a local
|
47
|
+
database
|
48
|
+
test_files: []
|