heroku_san 3.0.4 → 4.0.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.
- data/.gitignore +0 -1
- data/CHANGELOG.md +11 -1
- data/Gemfile.lock +132 -0
- data/README.md +3 -0
- data/Rakefile +4 -3
- data/features/remote.feature +2 -5
- data/features/step_definitions/remote_steps.rb +54 -64
- data/heroku_san.gemspec +9 -5
- data/lib/heroku_san/deploy/rails.rb +1 -1
- data/lib/heroku_san/stage.rb +26 -18
- data/lib/heroku_san/tasks.rb +3 -16
- data/lib/heroku_san/version.rb +1 -1
- data/spec/bugs/issue_105_spec.rb +13 -0
- data/spec/heroku_san/deploy/rails_spec.rb +1 -1
- data/spec/heroku_san/stage_spec.rb +10 -28
- metadata +170 -157
- data/autotest/discover.rb +0 -1
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Change log (curated)
|
|
2
2
|
|
|
3
|
+
## v4.0.0
|
|
4
|
+
|
|
5
|
+
* Remove dependency on sunsetted 'heroku' gem. Add external dependency
|
|
6
|
+
on Heroku Toolbelt, instead.
|
|
7
|
+
* Deprecate Stage#rake, Stage#sharing_add and Stage#sharing_remove
|
|
8
|
+
* Closes #104
|
|
9
|
+
* Closes #107
|
|
10
|
+
* Closes #108
|
|
11
|
+
* Thanks to sworbel for the pull request (#104)
|
|
12
|
+
|
|
3
13
|
## v3.0.4
|
|
4
14
|
|
|
5
15
|
* Documentation syntax highlighting and formatting.
|
|
@@ -81,4 +91,4 @@
|
|
|
81
91
|
|
|
82
92
|
## v1.3.0
|
|
83
93
|
|
|
84
|
-
N/A
|
|
94
|
+
N/A
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
heroku_san (4.0.0)
|
|
5
|
+
activesupport
|
|
6
|
+
heroku-api (>= 0.1.2)
|
|
7
|
+
rake
|
|
8
|
+
|
|
9
|
+
GEM
|
|
10
|
+
remote: http://rubygems.org/
|
|
11
|
+
specs:
|
|
12
|
+
actionmailer (3.2.1)
|
|
13
|
+
actionpack (= 3.2.1)
|
|
14
|
+
mail (~> 2.4.0)
|
|
15
|
+
actionpack (3.2.1)
|
|
16
|
+
activemodel (= 3.2.1)
|
|
17
|
+
activesupport (= 3.2.1)
|
|
18
|
+
builder (~> 3.0.0)
|
|
19
|
+
erubis (~> 2.7.0)
|
|
20
|
+
journey (~> 1.0.1)
|
|
21
|
+
rack (~> 1.4.0)
|
|
22
|
+
rack-cache (~> 1.1)
|
|
23
|
+
rack-test (~> 0.6.1)
|
|
24
|
+
sprockets (~> 2.1.2)
|
|
25
|
+
activemodel (3.2.1)
|
|
26
|
+
activesupport (= 3.2.1)
|
|
27
|
+
builder (~> 3.0.0)
|
|
28
|
+
activerecord (3.2.1)
|
|
29
|
+
activemodel (= 3.2.1)
|
|
30
|
+
activesupport (= 3.2.1)
|
|
31
|
+
arel (~> 3.0.0)
|
|
32
|
+
tzinfo (~> 0.3.29)
|
|
33
|
+
activeresource (3.2.1)
|
|
34
|
+
activemodel (= 3.2.1)
|
|
35
|
+
activesupport (= 3.2.1)
|
|
36
|
+
activesupport (3.2.1)
|
|
37
|
+
i18n (~> 0.6)
|
|
38
|
+
multi_json (~> 1.0)
|
|
39
|
+
arel (3.0.2)
|
|
40
|
+
aruba (0.5.0)
|
|
41
|
+
childprocess (= 0.2.3)
|
|
42
|
+
cucumber (>= 1.1.1)
|
|
43
|
+
ffi (>= 1.0.11)
|
|
44
|
+
rspec-expectations (>= 2.7.0)
|
|
45
|
+
builder (3.0.4)
|
|
46
|
+
childprocess (0.2.3)
|
|
47
|
+
ffi (~> 1.0.6)
|
|
48
|
+
colorize (0.5.8)
|
|
49
|
+
cucumber (1.2.1)
|
|
50
|
+
builder (>= 2.1.2)
|
|
51
|
+
diff-lcs (>= 1.1.3)
|
|
52
|
+
gherkin (~> 2.11.0)
|
|
53
|
+
json (>= 1.4.6)
|
|
54
|
+
diff-lcs (1.1.3)
|
|
55
|
+
erubis (2.7.0)
|
|
56
|
+
excon (0.16.7)
|
|
57
|
+
ffi (1.0.11)
|
|
58
|
+
gherkin (2.11.5)
|
|
59
|
+
json (>= 1.4.6)
|
|
60
|
+
git-smart (0.1.9)
|
|
61
|
+
colorize
|
|
62
|
+
godot (0.1.0)
|
|
63
|
+
heroku-api (0.3.5)
|
|
64
|
+
excon (~> 0.16.1)
|
|
65
|
+
hike (1.2.1)
|
|
66
|
+
i18n (0.6.0)
|
|
67
|
+
journey (1.0.3)
|
|
68
|
+
json (1.7.5)
|
|
69
|
+
mail (2.4.1)
|
|
70
|
+
i18n (>= 0.4.0)
|
|
71
|
+
mime-types (~> 1.16)
|
|
72
|
+
treetop (~> 1.4.8)
|
|
73
|
+
mime-types (1.17.2)
|
|
74
|
+
multi_json (1.1.0)
|
|
75
|
+
polyglot (0.3.3)
|
|
76
|
+
rack (1.4.1)
|
|
77
|
+
rack-cache (1.1)
|
|
78
|
+
rack (>= 0.4)
|
|
79
|
+
rack-ssl (1.3.2)
|
|
80
|
+
rack
|
|
81
|
+
rack-test (0.6.1)
|
|
82
|
+
rack (>= 1.0)
|
|
83
|
+
rails (3.2.1)
|
|
84
|
+
actionmailer (= 3.2.1)
|
|
85
|
+
actionpack (= 3.2.1)
|
|
86
|
+
activerecord (= 3.2.1)
|
|
87
|
+
activeresource (= 3.2.1)
|
|
88
|
+
activesupport (= 3.2.1)
|
|
89
|
+
bundler (~> 1.0)
|
|
90
|
+
railties (= 3.2.1)
|
|
91
|
+
railties (3.2.1)
|
|
92
|
+
actionpack (= 3.2.1)
|
|
93
|
+
activesupport (= 3.2.1)
|
|
94
|
+
rack-ssl (~> 1.3.2)
|
|
95
|
+
rake (>= 0.8.7)
|
|
96
|
+
rdoc (~> 3.4)
|
|
97
|
+
thor (~> 0.14.6)
|
|
98
|
+
rake (0.9.2.2)
|
|
99
|
+
rdoc (3.12)
|
|
100
|
+
json (~> 1.4)
|
|
101
|
+
rspec (2.11.0)
|
|
102
|
+
rspec-core (~> 2.11.0)
|
|
103
|
+
rspec-expectations (~> 2.11.0)
|
|
104
|
+
rspec-mocks (~> 2.11.0)
|
|
105
|
+
rspec-core (2.11.1)
|
|
106
|
+
rspec-expectations (2.11.3)
|
|
107
|
+
diff-lcs (~> 1.1.3)
|
|
108
|
+
rspec-mocks (2.11.3)
|
|
109
|
+
sprockets (2.1.2)
|
|
110
|
+
hike (~> 1.2)
|
|
111
|
+
rack (~> 1.0)
|
|
112
|
+
tilt (~> 1.1, != 1.3.0)
|
|
113
|
+
thor (0.14.6)
|
|
114
|
+
tilt (1.3.3)
|
|
115
|
+
treetop (1.4.10)
|
|
116
|
+
polyglot
|
|
117
|
+
polyglot (>= 0.3.1)
|
|
118
|
+
tzinfo (0.3.31)
|
|
119
|
+
|
|
120
|
+
PLATFORMS
|
|
121
|
+
ruby
|
|
122
|
+
|
|
123
|
+
DEPENDENCIES
|
|
124
|
+
aruba
|
|
125
|
+
bundler (~> 1.1)
|
|
126
|
+
cucumber
|
|
127
|
+
git-smart
|
|
128
|
+
godot
|
|
129
|
+
heroku_san!
|
|
130
|
+
rails (>= 2)
|
|
131
|
+
rake
|
|
132
|
+
rspec
|
data/README.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Helpful rake tasks for Heroku.
|
|
3
3
|
|
|
4
4
|
[](http://travis-ci.org/fastestforward/heroku_san)
|
|
5
|
+
[](https://codeclimate.com/github/fastestforward/heroku_san)
|
|
5
6
|
|
|
6
7
|
## Install
|
|
7
8
|
|
|
@@ -144,6 +145,7 @@ A full list of tasks provided:
|
|
|
144
145
|
rake heroku:remotes # Add git remotes for all apps in this project
|
|
145
146
|
rake heroku:restart # Restarts remote servers
|
|
146
147
|
rake heroku:share # Adds a collaborator (asks for email)
|
|
148
|
+
rake heroku:shell # Opens a bash shell within app
|
|
147
149
|
rake heroku:unshare # Removes a collaborator (asks for email)
|
|
148
150
|
rake heroku:stage:all # Select all Heroku apps for later command
|
|
149
151
|
```
|
|
@@ -161,6 +163,7 @@ Frequently used tasks are aliased into the global namespace:
|
|
|
161
163
|
task :migrate => 'heroku:db:migrate'
|
|
162
164
|
task :logs => 'heroku:logs:default'
|
|
163
165
|
task 'logs:tail' => 'heroku:logs:tail'
|
|
166
|
+
task 'shell' => 'heroku:shell'
|
|
164
167
|
```
|
|
165
168
|
|
|
166
169
|
## Links
|
data/Rakefile
CHANGED
data/features/remote.feature
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@announce-cmd
|
|
1
|
+
@slow_process @announce-cmd
|
|
2
2
|
Feature: heroku_san can control a project on Heroku
|
|
3
3
|
WARNING: This WILL create apps on Heroku!
|
|
4
4
|
You must login with the heroku cli before starting
|
|
@@ -9,8 +9,7 @@ Feature: heroku_san can control a project on Heroku
|
|
|
9
9
|
Given I have a new Rails project
|
|
10
10
|
When I am in the project directory
|
|
11
11
|
And I add heroku_san to the Gemfile
|
|
12
|
-
|
|
13
|
-
Then rake reports that the heroku: tasks are available
|
|
12
|
+
Then rake reports that the heroku: tasks are available
|
|
14
13
|
|
|
15
14
|
Scenario: Manipulates a Rails app on Heroku
|
|
16
15
|
Given I have a new Rails project
|
|
@@ -20,7 +19,6 @@ Feature: heroku_san can control a project on Heroku
|
|
|
20
19
|
And I run bundle install
|
|
21
20
|
And I generate a new config file
|
|
22
21
|
And I create my project on Heroku
|
|
23
|
-
And I list the remote configuration
|
|
24
22
|
And I curl the app home page
|
|
25
23
|
And I configure my project
|
|
26
24
|
And I turn maintenance on
|
|
@@ -41,7 +39,6 @@ Feature: heroku_san can control a project on Heroku
|
|
|
41
39
|
And I run bundle install
|
|
42
40
|
And I create a new config/heroku.yml file
|
|
43
41
|
And I create my project on Heroku
|
|
44
|
-
And I list the remote configuration
|
|
45
42
|
And I curl the app home page
|
|
46
43
|
And I configure my project
|
|
47
44
|
And I turn maintenance on
|
|
@@ -1,49 +1,50 @@
|
|
|
1
1
|
World(Aruba::Api)
|
|
2
2
|
require 'active_support/core_ext/string/strip'
|
|
3
|
+
require 'godot'
|
|
3
4
|
|
|
4
5
|
Given /^I have a new Rails project$/ do
|
|
5
6
|
cmd = "rails new test_app --quiet --force --database=postgresql --skip-bundle --skip-javascript --skip-test-unit --skip-sprockets"
|
|
6
|
-
|
|
7
|
+
run_clean unescape(cmd)
|
|
7
8
|
end
|
|
8
9
|
|
|
9
10
|
Given /^I have a new Sinatra project$/ do
|
|
10
11
|
create_dir 'test_app/config'
|
|
11
|
-
write_file 'test_app/app.rb',
|
|
12
|
+
write_file 'test_app/app.rb', <<-EOT.strip_heredoc
|
|
12
13
|
require 'sinatra'
|
|
13
14
|
|
|
14
15
|
get '/' do
|
|
15
16
|
'Hello, world.'
|
|
16
17
|
end
|
|
17
|
-
EOT
|
|
18
|
+
EOT
|
|
18
19
|
|
|
19
|
-
write_file 'test_app/config.ru',
|
|
20
|
+
write_file 'test_app/config.ru', <<-EOT.strip_heredoc
|
|
20
21
|
require './app'
|
|
21
22
|
run Sinatra::Application
|
|
22
|
-
EOT
|
|
23
|
+
EOT
|
|
23
24
|
|
|
24
|
-
write_file 'test_app/Gemfile',
|
|
25
|
+
write_file 'test_app/Gemfile', <<-EOT.strip_heredoc
|
|
25
26
|
source 'http://rubygems.org'
|
|
26
27
|
gem 'sinatra'
|
|
27
|
-
EOT
|
|
28
|
+
EOT
|
|
28
29
|
|
|
29
|
-
write_file 'test_app/Rakefile',
|
|
30
|
+
write_file 'test_app/Rakefile', <<-EOT.strip_heredoc
|
|
30
31
|
require "bundler/setup"
|
|
31
32
|
require "heroku_san"
|
|
32
33
|
config_file = File.join(File.expand_path(File.dirname(__FILE__)), 'config', 'heroku.yml')
|
|
33
34
|
HerokuSan.project = HerokuSan::Project.new(config_file, :deploy => HerokuSan::Deploy::Sinatra)
|
|
34
35
|
load "heroku_san/tasks.rb"
|
|
35
|
-
EOT
|
|
36
|
+
EOT
|
|
36
37
|
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
When /^I am in the project directory$/ do
|
|
40
41
|
cd '/test_app'
|
|
41
|
-
|
|
42
|
+
run_clean 'git init .'
|
|
42
43
|
end
|
|
43
44
|
|
|
44
|
-
When /^I commit
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
When /^I commit .* changes with "(.*)"$/ do |message|
|
|
46
|
+
run_clean 'git add .'
|
|
47
|
+
run_clean "git commit -m '#{message}'"
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
When /^I add heroku_san to the Gemfile$/ do
|
|
@@ -54,35 +55,41 @@ When /^I add heroku_san to the Gemfile$/ do
|
|
|
54
55
|
EOT
|
|
55
56
|
end
|
|
56
57
|
|
|
58
|
+
def run_clean(cmd)
|
|
59
|
+
Bundler.with_clean_env do
|
|
60
|
+
ENV['NOEXEC'] = 'skip'
|
|
61
|
+
run_simple cmd
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
57
65
|
When /^I run bundle install$/ do
|
|
58
|
-
|
|
59
|
-
run_simple 'bundle install --quiet'
|
|
66
|
+
run_clean "bundle install"
|
|
60
67
|
end
|
|
61
68
|
|
|
62
69
|
Then /^rake reports that the heroku: tasks are available$/ do
|
|
63
|
-
|
|
64
|
-
output = stdout_from '
|
|
70
|
+
run_clean 'rake -T heroku:'
|
|
71
|
+
output = stdout_from 'rake -T heroku:'
|
|
65
72
|
assert_partial_output 'rake heroku:apps', output
|
|
66
73
|
end
|
|
67
74
|
|
|
68
75
|
When /^I generate a new config file$/ do
|
|
69
|
-
|
|
70
|
-
output = stdout_from '
|
|
76
|
+
run_clean 'rails generate heroku_san'
|
|
77
|
+
output = stdout_from 'rails generate heroku_san'
|
|
71
78
|
assert_partial_output 'create config/heroku.yml', output
|
|
72
79
|
overwrite_simple_config_file
|
|
73
80
|
end
|
|
74
81
|
|
|
75
82
|
When /^I create a new config\/heroku\.yml file$/ do
|
|
76
|
-
|
|
77
|
-
output = stdout_from '
|
|
83
|
+
run_clean 'rake heroku:create_config'
|
|
84
|
+
output = stdout_from 'rake heroku:create_config'
|
|
78
85
|
assert_matching_output %q{Copied example config to ".*.config.heroku.yml"}, output
|
|
79
86
|
assert_matching_output %q{Please edit ".*.config.heroku.yml" with your application's settings.}, output
|
|
80
87
|
overwrite_simple_config_file
|
|
81
88
|
end
|
|
82
89
|
|
|
83
90
|
When /^I create my project on Heroku$/ do
|
|
84
|
-
cmd = '
|
|
85
|
-
|
|
91
|
+
cmd = 'rake test_app heroku:create'
|
|
92
|
+
run_clean unescape(cmd)
|
|
86
93
|
output = stdout_from cmd
|
|
87
94
|
assert_matching_output %q{test_app: Created ([\w-]+)}, output
|
|
88
95
|
|
|
@@ -95,21 +102,8 @@ When /^I create my project on Heroku$/ do
|
|
|
95
102
|
EOT
|
|
96
103
|
end
|
|
97
104
|
|
|
98
|
-
When /^I list the remote configuration$/ do
|
|
99
|
-
cmd = 'bundle exec rake test_app heroku:config:list'
|
|
100
|
-
run_simple unescape(cmd)
|
|
101
|
-
output = stdout_from cmd
|
|
102
|
-
assert_partial_output "APP_NAME: #{@app}", output
|
|
103
|
-
assert_partial_output "URL: #{@app}.heroku.com", output
|
|
104
|
-
|
|
105
|
-
@url = output.match(/\bURL:\s+(.*.heroku.com)\b/)[1]
|
|
106
|
-
@curl = unescape("curl --silent http://#{@url}")
|
|
107
|
-
end
|
|
108
|
-
|
|
109
105
|
When /^I curl the app home page$/ do
|
|
110
|
-
|
|
111
|
-
output = stdout_from @curl
|
|
112
|
-
assert_partial_output '<h1><strong>Heroku | Welcome to your new app!</strong></h1>', output
|
|
106
|
+
Godot.match("#{@app}.herokuapp.com", 80, %r{<h1><strong>Heroku | Welcome to your new app!</strong></h1>}).should be, "Heroku didn't spin up a new app"
|
|
113
107
|
end
|
|
114
108
|
|
|
115
109
|
When /^I configure my project$/ do
|
|
@@ -121,38 +115,36 @@ When /^I configure my project$/ do
|
|
|
121
115
|
DROIDS: marvin
|
|
122
116
|
|
|
123
117
|
EOT
|
|
124
|
-
cmd = '
|
|
125
|
-
|
|
118
|
+
cmd = 'rake test_app heroku:config'
|
|
119
|
+
run_clean cmd
|
|
126
120
|
output = stdout_from cmd
|
|
127
121
|
assert_partial_output 'DROIDS: marvin', output
|
|
128
122
|
end
|
|
129
123
|
|
|
130
124
|
When /^I turn maintenance on$/ do
|
|
131
|
-
|
|
132
|
-
output = stdout_from '
|
|
125
|
+
run_clean 'rake test_app heroku:maintenance_on'
|
|
126
|
+
output = stdout_from 'rake test_app heroku:maintenance_on'
|
|
133
127
|
assert_partial_output 'test_app: Maintenance mode enabled.', output
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
output = stdout_from @curl
|
|
137
|
-
assert_partial_output '<title>Offline for Maintenance</title>', output
|
|
128
|
+
|
|
129
|
+
Godot.match("#{@app}.herokuapp.com", 80, %r{<title>Offline for Maintenance</title>}).should be, "App is not offline"
|
|
138
130
|
end
|
|
139
131
|
|
|
140
132
|
When /^I turn maintenance off$/ do
|
|
141
|
-
|
|
142
|
-
output = stdout_from '
|
|
133
|
+
run_clean 'rake test_app heroku:maintenance_off'
|
|
134
|
+
output = stdout_from 'rake test_app heroku:maintenance_off'
|
|
143
135
|
assert_partial_output 'test_app: Maintenance mode disabled.', output
|
|
144
136
|
assert_app_is_running
|
|
145
137
|
end
|
|
146
138
|
|
|
147
139
|
When /^I restart my project$/ do
|
|
148
|
-
|
|
149
|
-
output = stdout_from '
|
|
140
|
+
run_clean 'rake test_app heroku:restart'
|
|
141
|
+
output = stdout_from 'rake test_app heroku:restart'
|
|
150
142
|
assert_partial_output 'test_app: Restarted.', output
|
|
151
143
|
assert_app_is_running
|
|
152
144
|
end
|
|
153
145
|
|
|
154
146
|
When /^I generate a scaffold$/ do
|
|
155
|
-
|
|
147
|
+
run_clean 'rails generate scaffold droid'
|
|
156
148
|
append_to_file 'app/views/droids/index.html.erb', %Q{\n<div><code><%= ENV['DROIDS'] -%></code></div>\n}
|
|
157
149
|
end
|
|
158
150
|
|
|
@@ -166,16 +158,16 @@ EOT
|
|
|
166
158
|
end
|
|
167
159
|
|
|
168
160
|
When /^I deploy my project$/ do
|
|
169
|
-
|
|
170
|
-
assert_partial_output "http://#{@app}.
|
|
161
|
+
run_clean 'rake test_app deploy'
|
|
162
|
+
assert_partial_output "http://#{@app}.herokuapp.com deployed to Heroku", all_output
|
|
171
163
|
end
|
|
172
164
|
|
|
173
165
|
When /^I list all apps on Heroku$/ do
|
|
174
166
|
sha = in_current_dir do
|
|
175
167
|
`git rev-parse HEAD`.chomp
|
|
176
168
|
end
|
|
177
|
-
|
|
178
|
-
output = stdout_from '
|
|
169
|
+
run_clean 'rake heroku:apps'
|
|
170
|
+
output = stdout_from 'rake heroku:apps'
|
|
179
171
|
assert_partial_output "test_app is shorthand for the Heroku app #{@app} located at:", output
|
|
180
172
|
assert_partial_output "git@heroku.com:#{@app}.git", output
|
|
181
173
|
assert_partial_output "@ #{sha} master", output
|
|
@@ -191,24 +183,22 @@ When /^I install an addon$/ do
|
|
|
191
183
|
|
|
192
184
|
END_CONFIG
|
|
193
185
|
|
|
194
|
-
|
|
195
|
-
output = stdout_from '
|
|
196
|
-
# The output should show the
|
|
197
|
-
assert_partial_output "shared-database:5mb", output
|
|
198
|
-
# ... and the new one ...
|
|
186
|
+
run_clean 'rake test_app heroku:addons'
|
|
187
|
+
output = stdout_from 'rake test_app heroku:addons'
|
|
188
|
+
# The output should show the new one ...
|
|
199
189
|
assert_partial_output "deployhooks:campfire", output
|
|
200
190
|
# ... with a note about needing to configure it.
|
|
201
191
|
assert_partial_output "https://api.heroku.com/myapps/#{@app}/addons/deployhooks:campfire", output
|
|
202
192
|
end
|
|
203
193
|
|
|
204
194
|
Then /^heroku_san is green$/ do
|
|
205
|
-
|
|
195
|
+
run_clean "heroku apps:destroy #{@app} --confirm #{@app}"
|
|
206
196
|
end
|
|
207
197
|
|
|
208
198
|
def assert_app_is_running
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
199
|
+
vladimir = Godot.new("#{@app}.herokuapp.com", 80)
|
|
200
|
+
vladimir.timeout = 30
|
|
201
|
+
vladimir.match(%r{<code>marvin</code>}, 'droids').should be, "http://#{@app}.herokuapp.com/droids are not the droids I'm looking for"
|
|
212
202
|
end
|
|
213
203
|
|
|
214
204
|
def overwrite_simple_config_file
|
|
@@ -217,4 +207,4 @@ def overwrite_simple_config_file
|
|
|
217
207
|
test_app:
|
|
218
208
|
|
|
219
209
|
EOT
|
|
220
|
-
end
|
|
210
|
+
end
|
data/heroku_san.gemspec
CHANGED
|
@@ -11,37 +11,41 @@ Gem::Specification.new do |s|
|
|
|
11
11
|
s.description = %q{Manage multiple Heroku instances/apps for a single Rails app using Rake}
|
|
12
12
|
s.email = %q{elijah.miller@gmail.com}
|
|
13
13
|
s.homepage = %q{http://github.com/fastestforward/heroku_san}
|
|
14
|
+
s.license = "MIT"
|
|
14
15
|
s.files = `git ls-files`.split("\n")
|
|
15
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
16
17
|
s.require_paths = ["lib"]
|
|
17
18
|
s.extra_rdoc_files = ["README.md"]
|
|
18
19
|
s.rubygems_version = %q{1.6.1}
|
|
19
|
-
s.summary = %q{
|
|
20
|
+
s.summary = %q{
|
|
21
|
+
A bunch of useful Rake tasks for managing your Heroku apps.
|
|
22
|
+
NOTE: The Heroku Toolbelt must be installed to use this gem.
|
|
23
|
+
https://toolbelt.heroku.com/
|
|
24
|
+
}
|
|
20
25
|
|
|
21
26
|
if s.respond_to? :specification_version then
|
|
22
27
|
s.specification_version = 3
|
|
23
28
|
|
|
24
29
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
25
|
-
s.add_development_dependency(%q<rails>, ['>= 2'])
|
|
26
|
-
s.add_runtime_dependency(%q<heroku>, ['>= 2'])
|
|
27
30
|
s.add_runtime_dependency(%q<heroku-api>, ['>= 0.1.2'])
|
|
28
31
|
s.add_runtime_dependency(%q<rake>)
|
|
29
32
|
s.add_runtime_dependency('activesupport')
|
|
33
|
+
s.add_development_dependency(%q<rails>, ['>= 2'])
|
|
34
|
+
s.add_development_dependency(%q<rspec>)
|
|
30
35
|
s.add_development_dependency(%q<aruba>)
|
|
31
36
|
s.add_development_dependency(%q<cucumber>)
|
|
32
37
|
s.add_development_dependency(%q<rake>)
|
|
33
38
|
s.add_development_dependency(%q<bundler>, ['~> 1.1 '])
|
|
34
39
|
s.add_development_dependency('git-smart')
|
|
40
|
+
s.add_development_dependency('godot')
|
|
35
41
|
else
|
|
36
42
|
s.add_dependency(%q<rails>, ['>= 2'])
|
|
37
|
-
s.add_dependency(%q<heroku>, ['>= 2'])
|
|
38
43
|
s.add_dependency(%q<heroku-api>, ['>= 0.1.2'])
|
|
39
44
|
s.add_dependency(%q<aruba>)
|
|
40
45
|
s.add_dependency(%q<cucumber>)
|
|
41
46
|
end
|
|
42
47
|
else
|
|
43
48
|
s.add_dependency(%q<rails>, ['>= 2'])
|
|
44
|
-
s.add_dependency(%q<heroku>, ['>= 2'])
|
|
45
49
|
s.add_dependency(%q<heroku-api>, ['>= 0.1.2'])
|
|
46
50
|
s.add_dependency(%q<aruba>)
|
|
47
51
|
s.add_dependency(%q<cucumber>)
|
data/lib/heroku_san/stage.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
require 'heroku'
|
|
2
|
-
require 'heroku/api'
|
|
1
|
+
require 'heroku-api'
|
|
3
2
|
require 'json'
|
|
4
3
|
require 'active_support/core_ext/object/blank'
|
|
5
4
|
require 'active_support/core_ext/hash/keys'
|
|
5
|
+
require 'active_support/core_ext/hash/slice'
|
|
6
6
|
|
|
7
7
|
MOCK = false unless defined?(MOCK)
|
|
8
8
|
|
|
@@ -20,7 +20,7 @@ module HerokuSan
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def heroku
|
|
23
|
-
@heroku ||= Heroku::API.new(:api_key =>
|
|
23
|
+
@heroku ||= Heroku::API.new(:api_key => auth_token, :mock => MOCK)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def app
|
|
@@ -48,10 +48,10 @@ module HerokuSan
|
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def run(command, args = nil)
|
|
51
|
-
if stack
|
|
52
|
-
sh_heroku "run
|
|
51
|
+
if stack !~ /aspen|bamboo/
|
|
52
|
+
sh_heroku "run", command, *args
|
|
53
53
|
else
|
|
54
|
-
sh_heroku "run:#{command}
|
|
54
|
+
sh_heroku "run:#{command}", *args
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
|
|
@@ -61,7 +61,7 @@ module HerokuSan
|
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
def migrate
|
|
64
|
-
|
|
64
|
+
run('rake db:migrate')
|
|
65
65
|
restart
|
|
66
66
|
end
|
|
67
67
|
|
|
@@ -69,10 +69,9 @@ module HerokuSan
|
|
|
69
69
|
strategy = @options['deploy'].new(self, commit, force)
|
|
70
70
|
strategy.deploy
|
|
71
71
|
end
|
|
72
|
-
|
|
72
|
+
|
|
73
73
|
def rake(*args)
|
|
74
|
-
|
|
75
|
-
# heroku.rake app, args.join(' ')
|
|
74
|
+
raise HerokuSan::Deprecated.new("use Stage#run instead")
|
|
76
75
|
end
|
|
77
76
|
|
|
78
77
|
def maintenance(action = nil)
|
|
@@ -90,20 +89,20 @@ module HerokuSan
|
|
|
90
89
|
end
|
|
91
90
|
|
|
92
91
|
def create
|
|
93
|
-
params =
|
|
92
|
+
params = @options.slice('app', 'stack').stringify_keys
|
|
94
93
|
params['name'] = params.delete('app')
|
|
95
94
|
response = heroku.post_app(params)
|
|
96
95
|
response.body['name']
|
|
97
96
|
end
|
|
98
97
|
|
|
99
98
|
def sharing_add(email) # DEPREC?
|
|
100
|
-
|
|
99
|
+
raise HerokuSan::Deprecated
|
|
101
100
|
end
|
|
102
|
-
|
|
101
|
+
|
|
103
102
|
def sharing_remove(email) # DEPREC?
|
|
104
|
-
|
|
103
|
+
raise HerokuSan::Deprecated
|
|
105
104
|
end
|
|
106
|
-
|
|
105
|
+
|
|
107
106
|
def long_config
|
|
108
107
|
heroku.get_config_vars(app).body
|
|
109
108
|
end
|
|
@@ -138,9 +137,18 @@ module HerokuSan
|
|
|
138
137
|
end
|
|
139
138
|
|
|
140
139
|
private
|
|
141
|
-
|
|
142
|
-
def
|
|
143
|
-
|
|
140
|
+
|
|
141
|
+
def auth_token
|
|
142
|
+
@auth_token ||= (ENV['HEROKU_API_KEY'] || `heroku auth:token`.chomp unless MOCK)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def sh_heroku(*command)
|
|
146
|
+
cmd = (command + ['--app', app]).compact
|
|
147
|
+
show_command = cmd.join(' ')
|
|
148
|
+
$stderr.puts show_command if @debug
|
|
149
|
+
ok = system "heroku", *cmd
|
|
150
|
+
status = $?
|
|
151
|
+
ok or fail "Command failed with status (#{status.exitstatus}): [heroku #{show_command}]"
|
|
144
152
|
end
|
|
145
153
|
end
|
|
146
154
|
end
|
data/lib/heroku_san/tasks.rb
CHANGED
|
@@ -42,24 +42,12 @@ namespace :heroku do
|
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
desc 'Adds a collaborator (asks for email)'
|
|
46
45
|
task :share do
|
|
47
|
-
|
|
48
|
-
$stdout.flush
|
|
49
|
-
email = $stdin.gets
|
|
50
|
-
each_heroku_app do |stage|
|
|
51
|
-
stage.sharing_add email
|
|
52
|
-
end
|
|
46
|
+
raise HerokuSan::Deprecated
|
|
53
47
|
end
|
|
54
48
|
|
|
55
|
-
desc 'Removes a collaborator (asks for email)'
|
|
56
49
|
task :unshare do
|
|
57
|
-
|
|
58
|
-
$stdout.flush
|
|
59
|
-
email = $stdin.gets
|
|
60
|
-
each_heroku_app do |stage|
|
|
61
|
-
stage.sharing_remove email
|
|
62
|
-
end
|
|
50
|
+
raise HerokuSan::Deprecated
|
|
63
51
|
end
|
|
64
52
|
|
|
65
53
|
desc 'Lists configured apps'
|
|
@@ -119,7 +107,6 @@ namespace :heroku do
|
|
|
119
107
|
|
|
120
108
|
desc 'Creates an example configuration file'
|
|
121
109
|
task :create_config do
|
|
122
|
-
# FIXME: sh "rails generate heroku_san"
|
|
123
110
|
filename = %Q{#{HerokuSan.project.config_file.to_s}}
|
|
124
111
|
if HerokuSan.project.create_config
|
|
125
112
|
puts "Copied example config to #{filename.inspect}"
|
|
@@ -172,7 +159,7 @@ namespace :heroku do
|
|
|
172
159
|
desc 'Runs a rake task remotely'
|
|
173
160
|
task :rake, [:task] do |t, args|
|
|
174
161
|
each_heroku_app do |stage|
|
|
175
|
-
puts stage.rake args.task
|
|
162
|
+
puts stage.run "rake #{args.task}"
|
|
176
163
|
end
|
|
177
164
|
end
|
|
178
165
|
|
data/lib/heroku_san/version.rb
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
# https://github.com/fastestforward/heroku_san/issues/105
|
|
4
|
+
|
|
5
|
+
=begin
|
|
6
|
+
Expected(202) <=> Actual(422 Unprocessable Entity)
|
|
7
|
+
request => {:connect_timeout=>60, :headers=>{"Accept"=>"application/json", "Accept-Encoding"=>"gzip", "Authorization"=>"Basic OjUwZTc4NjgxZDhmYzcxZDI3Yzc5ZTM3MTZhNDk3Nzk1MzU2Mzk4ZTM=", "User-Agent"=>"heroku-rb/0.1.8", "X-Heroku-API-Version"=>"3", "X-Ruby-Version"=>"1.9.2", "X-Ruby-Platform"=>"x86_64-darwin10.8.0", "Host"=>"api.heroku.com:443", "Content-Length"=>0}, :instrumentor_name=>"excon", :mock=>false, :read_timeout=>60, :retry_limit=>4, :ssl_ca_file=>"/Users/kmayer/.rvm/gems/ruby-1.9.2-p320/gems/excon-0.13.4/data/cacert.pem", :ssl_verify_peer=>true, :write_timeout=>60, :host=>"api.heroku.com", :path=>"/apps", :port=>"443", :query=>{"app[name]"=>"stark-window-5734"}, :scheme=>"https", :expects=>202, :method=>:post}
|
|
8
|
+
response => #<Excon::Response:0x00000100e07288 @body="{\"error\":\"Name is already taken\"}", @headers={"Cache-Control"=>"no-cache", "Content-Type"=>"application/json; charset=utf-8", "Date"=>"Sun, 29 Jul 2012 19:24:33 GMT", "Server"=>"nginx/1.0.14", "Status"=>"422 Unprocessable Entity", "Strict-Transport-Security"=>"max-age=500", "X-RateLimit-Limit"=>"486", "X-RateLimit-Remaining"=>"485", "X-RateLimit-Reset"=>"1343589933", "X-Runtime"=>"426", "Content-Length"=>"33", "Connection"=>"keep-alive"}, @status=422>
|
|
9
|
+
=end
|
|
10
|
+
|
|
11
|
+
describe "Handle Excon exceptions" do
|
|
12
|
+
it "should report the error in a more readable format"
|
|
13
|
+
end
|
|
@@ -8,7 +8,7 @@ module HerokuSan
|
|
|
8
8
|
it "calls push, rake db:migrate & restart" do
|
|
9
9
|
subject = described_class.new(stage, {})
|
|
10
10
|
stage.should_receive(:push) { "pushed" } # "mock" super
|
|
11
|
-
stage.should_receive(:
|
|
11
|
+
stage.should_receive(:run).with('rake db:migrate') { "migrated" }
|
|
12
12
|
stage.should_receive(:restart) { "restarted" }
|
|
13
13
|
subject.deploy
|
|
14
14
|
end
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
|
-
require 'heroku/client'
|
|
3
2
|
|
|
4
3
|
describe HerokuSan::Stage do
|
|
5
4
|
include Git
|
|
6
|
-
subject { HerokuSan::Stage.new('production', {"app" => "awesomeapp", "stack" => "
|
|
5
|
+
subject { HerokuSan::Stage.new('production', {"app" => "awesomeapp", "stack" => "cedar"})}
|
|
7
6
|
STOCK_CONFIG = {"BUNDLE_WITHOUT"=>"development:test", "LANG"=>"en_US.UTF-8", "RACK_ENV"=>"production"}
|
|
8
|
-
before do
|
|
9
|
-
Heroku::Auth.stub(:api_key) { 'API_KEY' }
|
|
10
|
-
end
|
|
11
7
|
|
|
12
8
|
context "initializes" do
|
|
13
9
|
subject { HerokuSan::Stage.new('production',
|
|
@@ -73,13 +69,13 @@ describe HerokuSan::Stage do
|
|
|
73
69
|
|
|
74
70
|
describe "#run" do
|
|
75
71
|
it "runs commands using the pre-cedar format" do
|
|
76
|
-
subject.
|
|
77
|
-
subject.run
|
|
72
|
+
subject = HerokuSan::Stage.new('production', {"app" => "awesomeapp", "stack" => "aspen"})
|
|
73
|
+
subject.should_receive(:system).with("heroku", "run:rake foo bar bleh", "--app", "awesomeapp") { true }
|
|
74
|
+
subject.run 'rake foo bar bleh'
|
|
78
75
|
end
|
|
79
76
|
it "runs commands using the new cedar format" do
|
|
80
|
-
subject
|
|
81
|
-
subject.
|
|
82
|
-
subject.run 'worker', 'foo bar bleh'
|
|
77
|
+
subject.should_receive(:system).with("heroku", "run", "worker foo bar bleh", "--app", "awesomeapp") { true }
|
|
78
|
+
subject.run 'worker foo bar bleh'
|
|
83
79
|
end
|
|
84
80
|
end
|
|
85
81
|
|
|
@@ -108,7 +104,7 @@ describe HerokuSan::Stage do
|
|
|
108
104
|
describe "#migrate" do
|
|
109
105
|
it "runs rake db:migrate" do
|
|
110
106
|
with_app(subject, 'name' => subject.app) do |app_data|
|
|
111
|
-
subject.should_receive(:
|
|
107
|
+
subject.should_receive(:run).with('rake db:migrate').and_return 'output:'
|
|
112
108
|
subject.migrate.should == "restarted"
|
|
113
109
|
end
|
|
114
110
|
end
|
|
@@ -192,24 +188,10 @@ describe HerokuSan::Stage do
|
|
|
192
188
|
end
|
|
193
189
|
it "uses the stack from the config" do
|
|
194
190
|
(@app = subject.create).should == 'awesomeapp'
|
|
195
|
-
subject.heroku.get_stack(@app).body.detect{|stack| stack['current']}['name'].should == '
|
|
191
|
+
subject.heroku.get_stack(@app).body.detect{|stack| stack['current']}['name'].should == 'cedar'
|
|
196
192
|
end
|
|
197
193
|
end
|
|
198
194
|
|
|
199
|
-
describe "#sharing_add" do
|
|
200
|
-
it "add collaborators" do
|
|
201
|
-
subject.should_receive(:sh).with("heroku sharing:add email@example.com --app awesomeapp")
|
|
202
|
-
subject.sharing_add 'email@example.com'
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
describe "#sharing_remove" do
|
|
207
|
-
it "removes collaborators" do
|
|
208
|
-
subject.should_receive(:sh).with("heroku sharing:remove email@example.com --app awesomeapp")
|
|
209
|
-
subject.sharing_remove 'email@example.com'
|
|
210
|
-
end
|
|
211
|
-
end
|
|
212
|
-
|
|
213
195
|
describe "#long_config" do
|
|
214
196
|
it "returns the remote config" do
|
|
215
197
|
with_app(subject, 'name' => subject.app) do |app_data|
|
|
@@ -228,11 +210,11 @@ describe HerokuSan::Stage do
|
|
|
228
210
|
|
|
229
211
|
describe "#logs" do
|
|
230
212
|
it "returns log files" do
|
|
231
|
-
subject.should_receive(:
|
|
213
|
+
subject.should_receive(:system).with("heroku", "logs", "--app", "awesomeapp") { true }
|
|
232
214
|
subject.logs
|
|
233
215
|
end
|
|
234
216
|
it "tails log files" do
|
|
235
|
-
subject.should_receive(:
|
|
217
|
+
subject.should_receive(:system).with("heroku", "logs --tail", "--app", "awesomeapp") { true }
|
|
236
218
|
subject.logs(:tail)
|
|
237
219
|
end
|
|
238
220
|
end
|
metadata
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: heroku_san
|
|
3
|
-
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 63
|
|
5
5
|
prerelease:
|
|
6
|
+
segments:
|
|
7
|
+
- 4
|
|
8
|
+
- 0
|
|
9
|
+
- 0
|
|
10
|
+
version: 4.0.0
|
|
6
11
|
platform: ruby
|
|
7
|
-
authors:
|
|
12
|
+
authors:
|
|
8
13
|
- Elijah Miller
|
|
9
14
|
- Glenn Roberts
|
|
10
15
|
- Ryan Ahearn
|
|
@@ -12,183 +17,183 @@ authors:
|
|
|
12
17
|
autorequire:
|
|
13
18
|
bindir: bin
|
|
14
19
|
cert_chain: []
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
|
|
21
|
+
date: 2012-11-09 00:00:00 Z
|
|
22
|
+
dependencies:
|
|
23
|
+
- !ruby/object:Gem::Dependency
|
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
|
20
25
|
none: false
|
|
21
|
-
requirements:
|
|
22
|
-
- -
|
|
23
|
-
- !ruby/object:Gem::Version
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
requirements:
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
hash: 31
|
|
30
|
+
segments:
|
|
31
|
+
- 0
|
|
32
|
+
- 1
|
|
33
|
+
- 2
|
|
34
|
+
version: 0.1.2
|
|
26
35
|
prerelease: false
|
|
27
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
28
|
-
none: false
|
|
29
|
-
requirements:
|
|
30
|
-
- - ! '>='
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
version: '2'
|
|
33
|
-
- !ruby/object:Gem::Dependency
|
|
34
|
-
name: heroku
|
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
|
36
|
-
none: false
|
|
37
|
-
requirements:
|
|
38
|
-
- - ! '>='
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '2'
|
|
41
36
|
type: :runtime
|
|
42
|
-
prerelease: false
|
|
43
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
44
|
-
none: false
|
|
45
|
-
requirements:
|
|
46
|
-
- - ! '>='
|
|
47
|
-
- !ruby/object:Gem::Version
|
|
48
|
-
version: '2'
|
|
49
|
-
- !ruby/object:Gem::Dependency
|
|
50
37
|
name: heroku-api
|
|
51
|
-
requirement:
|
|
38
|
+
requirement: *id001
|
|
39
|
+
- !ruby/object:Gem::Dependency
|
|
40
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
|
52
41
|
none: false
|
|
53
|
-
requirements:
|
|
54
|
-
- -
|
|
55
|
-
- !ruby/object:Gem::Version
|
|
56
|
-
|
|
57
|
-
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
hash: 3
|
|
46
|
+
segments:
|
|
47
|
+
- 0
|
|
48
|
+
version: "0"
|
|
58
49
|
prerelease: false
|
|
59
|
-
|
|
60
|
-
none: false
|
|
61
|
-
requirements:
|
|
62
|
-
- - ! '>='
|
|
63
|
-
- !ruby/object:Gem::Version
|
|
64
|
-
version: 0.1.2
|
|
65
|
-
- !ruby/object:Gem::Dependency
|
|
50
|
+
type: :runtime
|
|
66
51
|
name: rake
|
|
67
|
-
requirement:
|
|
52
|
+
requirement: *id002
|
|
53
|
+
- !ruby/object:Gem::Dependency
|
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
|
68
55
|
none: false
|
|
69
|
-
requirements:
|
|
70
|
-
- -
|
|
71
|
-
- !ruby/object:Gem::Version
|
|
72
|
-
|
|
73
|
-
|
|
56
|
+
requirements:
|
|
57
|
+
- - ">="
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
hash: 3
|
|
60
|
+
segments:
|
|
61
|
+
- 0
|
|
62
|
+
version: "0"
|
|
74
63
|
prerelease: false
|
|
75
|
-
|
|
76
|
-
none: false
|
|
77
|
-
requirements:
|
|
78
|
-
- - ! '>='
|
|
79
|
-
- !ruby/object:Gem::Version
|
|
80
|
-
version: '0'
|
|
81
|
-
- !ruby/object:Gem::Dependency
|
|
64
|
+
type: :runtime
|
|
82
65
|
name: activesupport
|
|
83
|
-
requirement:
|
|
66
|
+
requirement: *id003
|
|
67
|
+
- !ruby/object:Gem::Dependency
|
|
68
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
|
84
69
|
none: false
|
|
85
|
-
requirements:
|
|
86
|
-
- -
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
|
|
89
|
-
|
|
70
|
+
requirements:
|
|
71
|
+
- - ">="
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
hash: 7
|
|
74
|
+
segments:
|
|
75
|
+
- 2
|
|
76
|
+
version: "2"
|
|
90
77
|
prerelease: false
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
version: '0'
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: aruba
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
78
|
+
type: :development
|
|
79
|
+
name: rails
|
|
80
|
+
requirement: *id004
|
|
81
|
+
- !ruby/object:Gem::Dependency
|
|
82
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
|
100
83
|
none: false
|
|
101
|
-
requirements:
|
|
102
|
-
- -
|
|
103
|
-
- !ruby/object:Gem::Version
|
|
104
|
-
|
|
84
|
+
requirements:
|
|
85
|
+
- - ">="
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
hash: 3
|
|
88
|
+
segments:
|
|
89
|
+
- 0
|
|
90
|
+
version: "0"
|
|
91
|
+
prerelease: false
|
|
105
92
|
type: :development
|
|
93
|
+
name: rspec
|
|
94
|
+
requirement: *id005
|
|
95
|
+
- !ruby/object:Gem::Dependency
|
|
96
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
|
97
|
+
none: false
|
|
98
|
+
requirements:
|
|
99
|
+
- - ">="
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
hash: 3
|
|
102
|
+
segments:
|
|
103
|
+
- 0
|
|
104
|
+
version: "0"
|
|
106
105
|
prerelease: false
|
|
107
|
-
|
|
106
|
+
type: :development
|
|
107
|
+
name: aruba
|
|
108
|
+
requirement: *id006
|
|
109
|
+
- !ruby/object:Gem::Dependency
|
|
110
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
|
108
111
|
none: false
|
|
109
|
-
requirements:
|
|
110
|
-
- -
|
|
111
|
-
- !ruby/object:Gem::Version
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
requirements:
|
|
113
|
+
- - ">="
|
|
114
|
+
- !ruby/object:Gem::Version
|
|
115
|
+
hash: 3
|
|
116
|
+
segments:
|
|
117
|
+
- 0
|
|
118
|
+
version: "0"
|
|
119
|
+
prerelease: false
|
|
120
|
+
type: :development
|
|
114
121
|
name: cucumber
|
|
115
|
-
requirement:
|
|
122
|
+
requirement: *id007
|
|
123
|
+
- !ruby/object:Gem::Dependency
|
|
124
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
|
116
125
|
none: false
|
|
117
|
-
requirements:
|
|
118
|
-
- -
|
|
119
|
-
- !ruby/object:Gem::Version
|
|
120
|
-
|
|
121
|
-
|
|
126
|
+
requirements:
|
|
127
|
+
- - ">="
|
|
128
|
+
- !ruby/object:Gem::Version
|
|
129
|
+
hash: 3
|
|
130
|
+
segments:
|
|
131
|
+
- 0
|
|
132
|
+
version: "0"
|
|
122
133
|
prerelease: false
|
|
123
|
-
|
|
124
|
-
none: false
|
|
125
|
-
requirements:
|
|
126
|
-
- - ! '>='
|
|
127
|
-
- !ruby/object:Gem::Version
|
|
128
|
-
version: '0'
|
|
129
|
-
- !ruby/object:Gem::Dependency
|
|
134
|
+
type: :development
|
|
130
135
|
name: rake
|
|
131
|
-
requirement:
|
|
136
|
+
requirement: *id008
|
|
137
|
+
- !ruby/object:Gem::Dependency
|
|
138
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
|
132
139
|
none: false
|
|
133
|
-
requirements:
|
|
134
|
-
- -
|
|
135
|
-
- !ruby/object:Gem::Version
|
|
136
|
-
|
|
137
|
-
|
|
140
|
+
requirements:
|
|
141
|
+
- - ~>
|
|
142
|
+
- !ruby/object:Gem::Version
|
|
143
|
+
hash: 13
|
|
144
|
+
segments:
|
|
145
|
+
- 1
|
|
146
|
+
- 1
|
|
147
|
+
version: "1.1"
|
|
138
148
|
prerelease: false
|
|
139
|
-
|
|
140
|
-
none: false
|
|
141
|
-
requirements:
|
|
142
|
-
- - ! '>='
|
|
143
|
-
- !ruby/object:Gem::Version
|
|
144
|
-
version: '0'
|
|
145
|
-
- !ruby/object:Gem::Dependency
|
|
149
|
+
type: :development
|
|
146
150
|
name: bundler
|
|
147
|
-
requirement:
|
|
151
|
+
requirement: *id009
|
|
152
|
+
- !ruby/object:Gem::Dependency
|
|
153
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
|
148
154
|
none: false
|
|
149
|
-
requirements:
|
|
150
|
-
- -
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
|
|
153
|
-
|
|
155
|
+
requirements:
|
|
156
|
+
- - ">="
|
|
157
|
+
- !ruby/object:Gem::Version
|
|
158
|
+
hash: 3
|
|
159
|
+
segments:
|
|
160
|
+
- 0
|
|
161
|
+
version: "0"
|
|
154
162
|
prerelease: false
|
|
155
|
-
|
|
156
|
-
none: false
|
|
157
|
-
requirements:
|
|
158
|
-
- - ~>
|
|
159
|
-
- !ruby/object:Gem::Version
|
|
160
|
-
version: '1.1'
|
|
161
|
-
- !ruby/object:Gem::Dependency
|
|
163
|
+
type: :development
|
|
162
164
|
name: git-smart
|
|
163
|
-
requirement:
|
|
165
|
+
requirement: *id010
|
|
166
|
+
- !ruby/object:Gem::Dependency
|
|
167
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
|
164
168
|
none: false
|
|
165
|
-
requirements:
|
|
166
|
-
- -
|
|
167
|
-
- !ruby/object:Gem::Version
|
|
168
|
-
|
|
169
|
-
|
|
169
|
+
requirements:
|
|
170
|
+
- - ">="
|
|
171
|
+
- !ruby/object:Gem::Version
|
|
172
|
+
hash: 3
|
|
173
|
+
segments:
|
|
174
|
+
- 0
|
|
175
|
+
version: "0"
|
|
170
176
|
prerelease: false
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
- - ! '>='
|
|
175
|
-
- !ruby/object:Gem::Version
|
|
176
|
-
version: '0'
|
|
177
|
+
type: :development
|
|
178
|
+
name: godot
|
|
179
|
+
requirement: *id011
|
|
177
180
|
description: Manage multiple Heroku instances/apps for a single Rails app using Rake
|
|
178
181
|
email: elijah.miller@gmail.com
|
|
179
182
|
executables: []
|
|
183
|
+
|
|
180
184
|
extensions: []
|
|
181
|
-
|
|
185
|
+
|
|
186
|
+
extra_rdoc_files:
|
|
182
187
|
- README.md
|
|
183
|
-
files:
|
|
188
|
+
files:
|
|
184
189
|
- .gitignore
|
|
185
190
|
- .travis.yml
|
|
186
191
|
- CHANGELOG.md
|
|
187
192
|
- Gemfile
|
|
193
|
+
- Gemfile.lock
|
|
188
194
|
- LICENSE
|
|
189
195
|
- README.md
|
|
190
196
|
- Rakefile
|
|
191
|
-
- autotest/discover.rb
|
|
192
197
|
- cucumber.yml
|
|
193
198
|
- examples/auto_tagger.rake
|
|
194
199
|
- examples/deploy_strategies.md
|
|
@@ -213,6 +218,7 @@ files:
|
|
|
213
218
|
- lib/railtie.rb
|
|
214
219
|
- lib/tasks/heroku.rake
|
|
215
220
|
- lib/templates/heroku.example.yml
|
|
221
|
+
- spec/bugs/issue_105_spec.rb
|
|
216
222
|
- spec/fixtures/example.yml
|
|
217
223
|
- spec/fixtures/extended_config.yml
|
|
218
224
|
- spec/fixtures/old_format.yml
|
|
@@ -225,38 +231,45 @@ files:
|
|
|
225
231
|
- spec/spec_helper.rb
|
|
226
232
|
- spec/support/heroku.rb
|
|
227
233
|
homepage: http://github.com/fastestforward/heroku_san
|
|
228
|
-
licenses:
|
|
234
|
+
licenses:
|
|
235
|
+
- MIT
|
|
229
236
|
post_install_message:
|
|
230
237
|
rdoc_options: []
|
|
231
|
-
|
|
238
|
+
|
|
239
|
+
require_paths:
|
|
232
240
|
- lib
|
|
233
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
|
241
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
234
242
|
none: false
|
|
235
|
-
requirements:
|
|
236
|
-
- -
|
|
237
|
-
- !ruby/object:Gem::Version
|
|
238
|
-
|
|
239
|
-
segments:
|
|
243
|
+
requirements:
|
|
244
|
+
- - ">="
|
|
245
|
+
- !ruby/object:Gem::Version
|
|
246
|
+
hash: 3
|
|
247
|
+
segments:
|
|
240
248
|
- 0
|
|
241
|
-
|
|
242
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
|
+
version: "0"
|
|
250
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
251
|
none: false
|
|
244
|
-
requirements:
|
|
245
|
-
- -
|
|
246
|
-
- !ruby/object:Gem::Version
|
|
247
|
-
|
|
252
|
+
requirements:
|
|
253
|
+
- - ">="
|
|
254
|
+
- !ruby/object:Gem::Version
|
|
255
|
+
hash: 3
|
|
256
|
+
segments:
|
|
257
|
+
- 0
|
|
258
|
+
version: "0"
|
|
248
259
|
requirements: []
|
|
260
|
+
|
|
249
261
|
rubyforge_project:
|
|
250
262
|
rubygems_version: 1.8.24
|
|
251
263
|
signing_key:
|
|
252
264
|
specification_version: 3
|
|
253
|
-
summary: A bunch of useful Rake tasks for managing your Heroku apps
|
|
254
|
-
test_files:
|
|
265
|
+
summary: "A bunch of useful Rake tasks for managing your Heroku apps. NOTE: The Heroku Toolbelt must be installed to use this gem. https://toolbelt.heroku.com/"
|
|
266
|
+
test_files:
|
|
255
267
|
- features/config.feature
|
|
256
268
|
- features/extended-config.feature
|
|
257
269
|
- features/remote.feature
|
|
258
270
|
- features/step_definitions/remote_steps.rb
|
|
259
271
|
- features/support/env.rb
|
|
272
|
+
- spec/bugs/issue_105_spec.rb
|
|
260
273
|
- spec/fixtures/example.yml
|
|
261
274
|
- spec/fixtures/extended_config.yml
|
|
262
275
|
- spec/fixtures/old_format.yml
|
data/autotest/discover.rb
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Autotest.add_discovery { "rspec2" }
|