capistrano-rainbows 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +41 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +87 -0
- data/Rakefile +2 -0
- data/capistrano-rainbows.gemspec +20 -0
- data/examples/rails3.rb +45 -0
- data/lib/capistrano-rainbows.rb +1 -0
- data/lib/capistrano-rainbows/capistrano_integration.rb +225 -0
- metadata +79 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 15f96b073a2639f6c611f1f30d27caf731a9fbb5
|
4
|
+
data.tar.gz: 0e97d69816bbc08d08df1098bba3cef9f2cf68e2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b174dd2ea24620c640cce9213883fb57cf967642b5c963e99fbf4d3766891a9d8c4e90f23b976b8d64e7072f6bf9a556f540fab3a4600e7d8ddf7d9b0ac9753b
|
7
|
+
data.tar.gz: 8875bc3ab395a9d0ab14422ed4a5d1857345423d6860638e5cdb858cf9a7c87e1eae5efc73f6e6219f738b4bd9f2b5057f4126a8ac8439aa56fdbfd8e2ef9715
|
data/.gitignore
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
!.gitignore
|
2
|
+
*.gem
|
3
|
+
*.rbc
|
4
|
+
*.sw[a-p]
|
5
|
+
*.tmproj
|
6
|
+
*.tmproject
|
7
|
+
*.un~
|
8
|
+
*~
|
9
|
+
.DS_Store
|
10
|
+
.Spotlight-V100
|
11
|
+
.Trashes
|
12
|
+
._*
|
13
|
+
.bundle
|
14
|
+
.config
|
15
|
+
.directory
|
16
|
+
.elc
|
17
|
+
.redcar
|
18
|
+
.yardoc
|
19
|
+
/.emacs.desktop
|
20
|
+
/.emacs.desktop.lock
|
21
|
+
Desktop.ini
|
22
|
+
Gemfile.lock
|
23
|
+
Icon?
|
24
|
+
InstalledFiles
|
25
|
+
Session.vim
|
26
|
+
Thumbs.db
|
27
|
+
\#*\#
|
28
|
+
_yardoc
|
29
|
+
auto-save-list
|
30
|
+
coverage
|
31
|
+
doc/
|
32
|
+
lib/bundler/man
|
33
|
+
pkg
|
34
|
+
pkg/*
|
35
|
+
rdoc
|
36
|
+
spec/reports
|
37
|
+
test/tmp
|
38
|
+
test/version_tmp
|
39
|
+
tmp
|
40
|
+
tmtags
|
41
|
+
tramp
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012-2013 H2ocube.com
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
9
|
+
of the Software, and to permit persons to whom the Software is furnished to
|
10
|
+
do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
16
|
+
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
17
|
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
18
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
20
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
# Capistrano Rainbows
|
2
|
+
|
3
|
+
Capistrano plugin that integrates Rainbows tasks into capistrano deployment script.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Install library from rubygems:
|
8
|
+
|
9
|
+
```
|
10
|
+
gem install capistrano-rainbows
|
11
|
+
```
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
### Setup
|
16
|
+
|
17
|
+
Add the library to your `Gemfile`:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
group :development do
|
21
|
+
gem 'capistrano-rainbows', require: false
|
22
|
+
end
|
23
|
+
```
|
24
|
+
|
25
|
+
And load it into your deployment script `config/deploy.rb`:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
require 'capistrano-rainbows'
|
29
|
+
```
|
30
|
+
|
31
|
+
Add rainbows restart task hook:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
after 'deploy:restart', 'rainbows:reload' # app IS NOT preloaded
|
35
|
+
after 'deploy:restart', 'rainbows:restart' # app preloaded
|
36
|
+
```
|
37
|
+
|
38
|
+
Create a new configuration file `config/rainbows/rainbows.rb` or `config/rainbows/STAGE.rb`, where stage is your deployment environment.
|
39
|
+
|
40
|
+
Example config - [examples/rails3.rb](https://github.com/sosedoff/capistrano-rainbows/blob/master/examples/rails3.rb). Please refer to rainbows documentation for more examples and configuration options.
|
41
|
+
|
42
|
+
### Test
|
43
|
+
|
44
|
+
First, make sure you're running the latest release:
|
45
|
+
|
46
|
+
```
|
47
|
+
cap deploy
|
48
|
+
```
|
49
|
+
|
50
|
+
Then you can test each individual task:
|
51
|
+
|
52
|
+
```
|
53
|
+
cap rainbows:start
|
54
|
+
cap rainbows:stop
|
55
|
+
cap rainbows:reload
|
56
|
+
```
|
57
|
+
|
58
|
+
## Configuration
|
59
|
+
|
60
|
+
You can modify any of the following options in your `deploy.rb` config.
|
61
|
+
|
62
|
+
- `rainbows_env` - Set rainbows environment. Default to `rails_env` variable.
|
63
|
+
- `rainbows_pid` - Set rainbows PID file path. Default to `current_path/tmp/pids/rainbows.pid`
|
64
|
+
- `rainbows_bin` - Set rainbows executable file. Default to `rainbows`.
|
65
|
+
- `rainbows_bundle` - Set bundler command for rainbows. Default to `bundle`.
|
66
|
+
- `rainbows_user` - Launch rainbows master as the specified user. Default to `user` variable.
|
67
|
+
- `rainbows_roles` - Define which roles to perform rainbows recpies on. Default to `:app`.
|
68
|
+
- `rainbows_config_path` - Set the directory where rainbows config files reside. Default to `current_path/config`.
|
69
|
+
- `rainbows_config_filename` - Set the filename of the rainbows config file. Not used in multistage installations. Default to `rainbows.rb`.
|
70
|
+
|
71
|
+
## Available Tasks
|
72
|
+
|
73
|
+
To get a list of all capistrano tasks, run `cap -T`:
|
74
|
+
|
75
|
+
```
|
76
|
+
cap rainbows:add_worker # Add a new worker
|
77
|
+
cap rainbows:remove_worker # Remove amount of workers
|
78
|
+
cap rainbows:reload # Reload rainbows
|
79
|
+
cap rainbows:restart # Restart rainbows
|
80
|
+
cap rainbows:shutdown # Immediately shutdown rainbows
|
81
|
+
cap rainbows:start # Start rainbows master process
|
82
|
+
cap rainbows:stop # Stop rainbows
|
83
|
+
```
|
84
|
+
|
85
|
+
## License
|
86
|
+
|
87
|
+
See LICENSE file for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.name = 'capistrano-rainbows'
|
5
|
+
gem.version = '0.0.1'
|
6
|
+
gem.author = 'Ben'
|
7
|
+
gem.email = 'ben@h2ocube.com'
|
8
|
+
gem.homepage = 'https://github.com/h2ocube/capistrano-rainbows'
|
9
|
+
gem.summary = %q{Rainbows integration for Capistrano}
|
10
|
+
gem.description = %q{Capistrano plugin that integrates Rainbows server tasks.}
|
11
|
+
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
|
15
|
+
gem.require_paths = ['lib']
|
16
|
+
|
17
|
+
gem.add_development_dependency 'rake'
|
18
|
+
|
19
|
+
gem.add_runtime_dependency 'capistrano'
|
20
|
+
end
|
data/examples/rails3.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# ------------------------------------------------------------------------------
|
2
|
+
# Sample rails 3 config
|
3
|
+
# ------------------------------------------------------------------------------
|
4
|
+
|
5
|
+
# Set your full path to application.
|
6
|
+
app_path = "/path/to/app"
|
7
|
+
|
8
|
+
# Set rainbows options
|
9
|
+
worker_processes 1
|
10
|
+
preload_app true
|
11
|
+
timeout 180
|
12
|
+
listen "127.0.0.1:9000"
|
13
|
+
|
14
|
+
# Spawn rainbows master worker for user apps (group: apps)
|
15
|
+
user 'apps', 'apps'
|
16
|
+
|
17
|
+
# Fill path to your app
|
18
|
+
working_directory app_path
|
19
|
+
|
20
|
+
# Should be 'production' by default, otherwise use other env
|
21
|
+
rails_env = ENV['RAILS_ENV'] || 'production'
|
22
|
+
|
23
|
+
# Log everything to one file
|
24
|
+
stderr_path "log/rainbows.log"
|
25
|
+
stdout_path "log/rainbows.log"
|
26
|
+
|
27
|
+
# Set master PID location
|
28
|
+
pid "#{app_path}/tmp/pids/rainbows.pid"
|
29
|
+
|
30
|
+
before_fork do |server, worker|
|
31
|
+
ActiveRecord::Base.connection.disconnect!
|
32
|
+
|
33
|
+
old_pid = "#{server.config[:pid]}.oldbin"
|
34
|
+
if File.exists?(old_pid) && server.pid != old_pid
|
35
|
+
begin
|
36
|
+
Process.kill("QUIT", File.read(old_pid).to_i)
|
37
|
+
rescue Errno::ENOENT, Errno::ESRCH
|
38
|
+
# someone else did our job for us
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
after_fork do |server, worker|
|
44
|
+
ActiveRecord::Base.establish_connection
|
45
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'capistrano-rainbows/capistrano_integration'
|
@@ -0,0 +1,225 @@
|
|
1
|
+
require 'capistrano'
|
2
|
+
|
3
|
+
module CapistranoRainbows
|
4
|
+
class CapistranoIntegration
|
5
|
+
TASKS = [
|
6
|
+
'rainbows:start',
|
7
|
+
'rainbows:stop',
|
8
|
+
'rainbows:restart',
|
9
|
+
'rainbows:duplicate',
|
10
|
+
'rainbows:reload',
|
11
|
+
'rainbows:shutdown',
|
12
|
+
'rainbows:add_worker',
|
13
|
+
'rainbows:remove_worker'
|
14
|
+
]
|
15
|
+
|
16
|
+
def self.load_into(capistrano_config)
|
17
|
+
capistrano_config.load do
|
18
|
+
before(CapistranoIntegration::TASKS) do
|
19
|
+
_cset(:app_env) { (fetch(:rails_env) rescue 'production') }
|
20
|
+
_cset(:rainbows_pid) { "#{fetch(:current_path)}/tmp/pids/rainbows.pid" }
|
21
|
+
_cset(:rainbows_env) { fetch(:app_env) }
|
22
|
+
_cset(:rainbows_bin) { "rainbows" }
|
23
|
+
_cset(:rainbows_bundle) { fetch(:bundle_cmd) rescue 'bundle' }
|
24
|
+
_cset(:rainbows_restart_sleep_time) { 2 }
|
25
|
+
_cset(:rainbows_user) { nil }
|
26
|
+
_cset(:rainbows_config_path) { "#{fetch(:current_path)}/config" }
|
27
|
+
_cset(:rainbows_config_filename) { "rainbows.rb" }
|
28
|
+
end
|
29
|
+
|
30
|
+
# Check if a remote process exists using its pid file
|
31
|
+
#
|
32
|
+
def remote_process_exists?(pid_file)
|
33
|
+
"[ -e #{pid_file} ] && #{try_rainbows_user} kill -0 `cat #{pid_file}` > /dev/null 2>&1"
|
34
|
+
end
|
35
|
+
|
36
|
+
# Stale rainbows process pid file
|
37
|
+
#
|
38
|
+
def old_rainbows_pid
|
39
|
+
"#{rainbows_pid}.oldbin"
|
40
|
+
end
|
41
|
+
|
42
|
+
# Command to check if rainbows is running
|
43
|
+
#
|
44
|
+
def rainbows_is_running?
|
45
|
+
remote_process_exists?(rainbows_pid)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Command to check if stale rainbows is running
|
49
|
+
#
|
50
|
+
def old_rainbows_is_running?
|
51
|
+
remote_process_exists?(old_rainbows_pid)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Get rainbows master process PID (using the shell)
|
55
|
+
#
|
56
|
+
def get_rainbows_pid(pid_file=rainbows_pid)
|
57
|
+
"`cat #{pid_file}`"
|
58
|
+
end
|
59
|
+
|
60
|
+
# Get rainbows master (old) process PID
|
61
|
+
#
|
62
|
+
def get_old_rainbows_pid
|
63
|
+
get_rainbows_pid(old_rainbows_pid)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Send a signal to a rainbows master processes
|
67
|
+
#
|
68
|
+
def rainbows_send_signal(signal, pid=get_rainbows_pid)
|
69
|
+
"#{try_rainbows_user} kill -s #{signal} #{pid}"
|
70
|
+
end
|
71
|
+
|
72
|
+
# Run a command as the :rainbows_user user if :rainbows_user is a string.
|
73
|
+
# Otherwise run as default (:user) user.
|
74
|
+
#
|
75
|
+
def try_rainbows_user
|
76
|
+
"#{sudo :as => rainbows_user.to_s}" if rainbows_user.kind_of?(String)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Kill rainbowss in multiple ways O_O
|
80
|
+
#
|
81
|
+
def kill_rainbows(signal)
|
82
|
+
script = <<-END
|
83
|
+
if #{rainbows_is_running?}; then
|
84
|
+
echo "Stopping rainbows...";
|
85
|
+
#{rainbows_send_signal(signal)};
|
86
|
+
else
|
87
|
+
echo "rainbows is not running.";
|
88
|
+
fi;
|
89
|
+
END
|
90
|
+
|
91
|
+
script
|
92
|
+
end
|
93
|
+
|
94
|
+
# Start the rainbows server
|
95
|
+
#
|
96
|
+
def start_rainbows
|
97
|
+
primary_config_path = "#{rainbows_config_path}/#{rainbows_config_filename}"
|
98
|
+
secondary_config_path = "#{rainbows_config_path}/rainbows/#{rainbows_env}.rb"
|
99
|
+
|
100
|
+
script = <<-END
|
101
|
+
if [ -e #{primary_config_path} ]; then
|
102
|
+
rainbows_CONFIG_PATH=#{primary_config_path};
|
103
|
+
else
|
104
|
+
if [ -e #{secondary_config_path} ]; then
|
105
|
+
rainbows_CONFIG_PATH=#{secondary_config_path};
|
106
|
+
else
|
107
|
+
echo "Config file for \"#{rainbows_env}\" environment was not found at either \"#{primary_config_path}\" or \"#{secondary_config_path}\"";
|
108
|
+
exit 1;
|
109
|
+
fi;
|
110
|
+
fi;
|
111
|
+
|
112
|
+
if [ -e #{rainbows_pid} ]; then
|
113
|
+
if #{try_rainbows_user} kill -0 `cat #{rainbows_pid}` > /dev/null 2>&1; then
|
114
|
+
echo "rainbows is already running!";
|
115
|
+
exit 0;
|
116
|
+
fi;
|
117
|
+
|
118
|
+
#{try_rainbows_user} rm #{rainbows_pid};
|
119
|
+
fi;
|
120
|
+
|
121
|
+
echo "Starting rainbows...";
|
122
|
+
cd #{current_path} && #{try_rainbows_user} BUNDLE_GEMFILE=#{current_path}/Gemfile #{rainbows_bundle} exec #{rainbows_bin} -c $rainbows_CONFIG_PATH -E #{app_env} -D;
|
123
|
+
END
|
124
|
+
|
125
|
+
script
|
126
|
+
end
|
127
|
+
|
128
|
+
def duplicate_rainbows
|
129
|
+
script = <<-END
|
130
|
+
if #{rainbows_is_running?}; then
|
131
|
+
echo "Duplicating rainbows...";
|
132
|
+
#{rainbows_send_signal('USR2')};
|
133
|
+
else
|
134
|
+
#{start_rainbows}
|
135
|
+
fi;
|
136
|
+
END
|
137
|
+
|
138
|
+
script
|
139
|
+
end
|
140
|
+
|
141
|
+
def rainbows_roles
|
142
|
+
fetch(:rainbows_roles, :app)
|
143
|
+
end
|
144
|
+
|
145
|
+
#
|
146
|
+
# rainbows cap tasks
|
147
|
+
#
|
148
|
+
namespace :rainbows do
|
149
|
+
desc 'Start rainbows master process'
|
150
|
+
task :start, :roles => rainbows_roles, :except => {:no_release => true} do
|
151
|
+
run start_rainbows
|
152
|
+
end
|
153
|
+
|
154
|
+
desc 'Stop rainbows'
|
155
|
+
task :stop, :roles => rainbows_roles, :except => {:no_release => true} do
|
156
|
+
run kill_rainbows('QUIT')
|
157
|
+
end
|
158
|
+
|
159
|
+
desc 'Immediately shutdown rainbows'
|
160
|
+
task :shutdown, :roles => rainbows_roles, :except => {:no_release => true} do
|
161
|
+
run kill_rainbows('TERM')
|
162
|
+
end
|
163
|
+
|
164
|
+
desc 'Restart rainbows'
|
165
|
+
task :restart, :roles => rainbows_roles, :except => {:no_release => true} do
|
166
|
+
run <<-END
|
167
|
+
#{duplicate_rainbows}
|
168
|
+
|
169
|
+
sleep #{rainbows_restart_sleep_time}; # in order to wait for the (old) pidfile to show up
|
170
|
+
|
171
|
+
if #{old_rainbows_is_running?}; then
|
172
|
+
#{rainbows_send_signal('QUIT', get_old_rainbows_pid)};
|
173
|
+
fi;
|
174
|
+
END
|
175
|
+
end
|
176
|
+
|
177
|
+
desc 'Duplicate rainbows'
|
178
|
+
task :duplicate, :roles => rainbows_roles, :except => {:no_release => true} do
|
179
|
+
run duplicate_rainbows()
|
180
|
+
end
|
181
|
+
|
182
|
+
desc 'Reload rainbows'
|
183
|
+
task :reload, :roles => rainbows_roles, :except => {:no_release => true} do
|
184
|
+
run <<-END
|
185
|
+
if #{rainbows_is_running?}; then
|
186
|
+
echo "Reloading rainbows...";
|
187
|
+
#{rainbows_send_signal('HUP')};
|
188
|
+
else
|
189
|
+
#{start_rainbows}
|
190
|
+
fi;
|
191
|
+
END
|
192
|
+
end
|
193
|
+
|
194
|
+
desc 'Add a new worker'
|
195
|
+
task :add_worker, :roles => rainbows_roles, :except => {:no_release => true} do
|
196
|
+
run <<-END
|
197
|
+
if #{rainbows_is_running?}; then
|
198
|
+
echo "Adding a new rainbows worker...";
|
199
|
+
#{rainbows_send_signal('TTIN')};
|
200
|
+
else
|
201
|
+
echo "rainbows is not running.";
|
202
|
+
fi;
|
203
|
+
END
|
204
|
+
end
|
205
|
+
|
206
|
+
desc 'Remove amount of workers'
|
207
|
+
task :remove_worker, :roles => rainbows_roles, :except => {:no_release => true} do
|
208
|
+
run <<-END
|
209
|
+
if #{rainbows_is_running?}; then
|
210
|
+
echo "Removing a rainbows worker...";
|
211
|
+
#{rainbows_send_signal('TTOU')};
|
212
|
+
else
|
213
|
+
echo "rainbows is not running.";
|
214
|
+
fi;
|
215
|
+
END
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
if Capistrano::Configuration.instance
|
224
|
+
CapistranoRainbows::CapistranoIntegration.load_into(Capistrano::Configuration.instance)
|
225
|
+
end
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capistrano-rainbows
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ben
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: capistrano
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Capistrano plugin that integrates Rainbows server tasks.
|
42
|
+
email: ben@h2ocube.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- .gitignore
|
48
|
+
- Gemfile
|
49
|
+
- LICENSE
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- capistrano-rainbows.gemspec
|
53
|
+
- examples/rails3.rb
|
54
|
+
- lib/capistrano-rainbows.rb
|
55
|
+
- lib/capistrano-rainbows/capistrano_integration.rb
|
56
|
+
homepage: https://github.com/h2ocube/capistrano-rainbows
|
57
|
+
licenses: []
|
58
|
+
metadata: {}
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
requirements: []
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 2.0.3
|
76
|
+
signing_key:
|
77
|
+
specification_version: 4
|
78
|
+
summary: Rainbows integration for Capistrano
|
79
|
+
test_files: []
|