heroku_san 3.0.4 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Build Status](https://secure.travis-ci.org/fastestforward/heroku_san.png)](http://travis-ci.org/fastestforward/heroku_san)
|
5
|
+
[![Code Climate](https://codeclimate.com/badge.png)](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" }
|