capistrano-rainbows 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.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: []
|