capistrano-resque 0.1.0 → 0.2.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.
- checksums.yaml +7 -0
- data/Changelog.md +12 -10
- data/README.md +75 -4
- data/lib/capistrano-resque.rb +7 -1
- data/lib/capistrano-resque/capistrano_integration.rb +36 -6
- data/lib/capistrano-resque/tasks/capistrano-resque.rake +141 -0
- data/lib/capistrano-resque/version.rb +1 -1
- metadata +15 -22
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2e15d3f8b0d54a6296f6bf508c33dc7314f335dd
|
4
|
+
data.tar.gz: 1f59211f7df131c3ec3067d8d48915c8ca82d2ea
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 15c30dc1bb42ca0b7891732921eebb365fe4ac5698a13c747f282b3c7a9bcf4a987e7f2c4f4ddcc5c5fbdeecfecf135f8f4de413266b971254c1eae17dd491b7
|
7
|
+
data.tar.gz: a2bfd6313c338ffef06a2f9173faf76c2b9cb94a5b4eac6a04902e45fa91f0d76a5ee3b8a67124de4021189da259b3acde1049e8aa90a19db28b321944d12087
|
data/Changelog.md
CHANGED
@@ -1,17 +1,19 @@
|
|
1
|
+
# Unreleased
|
2
|
+
* Added support for Capistrano 3.0
|
3
|
+
* Set MUTE environment variable for resque_scheduler
|
4
|
+
* Added a `resque_environment_task` option to load the `environment` rake task before running Resque workers
|
5
|
+
* Add a resque:scheduler:status task
|
6
|
+
|
1
7
|
# 0.1.0
|
2
|
-
Interval is configurable
|
3
|
-
Fix issue where pids weren't created correctly
|
8
|
+
* Interval is configurable
|
9
|
+
* Fix issue where pids weren't created correctly
|
4
10
|
|
5
11
|
# 0.0.9
|
6
|
-
|
7
|
-
Start workers in threads
|
12
|
+
* Start workers in threads
|
8
13
|
|
9
14
|
# 0.0.8
|
10
|
-
|
11
|
-
Using
|
12
|
-
Using SIGQUIT to kill processes as they aren't terminating properly
|
13
|
-
|
15
|
+
* Using stable branch of Resque, rather than the released gem, to take advantage of logging ability, losing shell redirection
|
16
|
+
* Using SIGQUIT to kill processes as they aren't terminating properly
|
14
17
|
|
15
18
|
# 0.0.7
|
16
|
-
|
17
|
-
Different workers for different roles
|
19
|
+
* Different workers for different roles
|
data/README.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# Capistrano Resque
|
2
2
|
|
3
|
-
Basic tasks for putting some Resque in your Cap.
|
3
|
+
Basic tasks for putting some Resque in your Cap. This should be fully compatible with both Capistrano 2.x and 3.x,
|
4
|
+
but if you run into any issues please report them.
|
5
|
+
|
6
|
+
### In your Gemfile:
|
7
|
+
|
8
|
+
```
|
9
|
+
gem "capistrano-resque", "~> 0.2.0", require: false
|
10
|
+
```
|
4
11
|
|
5
12
|
### In your Capfile:
|
6
13
|
|
@@ -8,6 +15,10 @@ Basic tasks for putting some Resque in your Cap.
|
|
8
15
|
require "capistrano-resque"
|
9
16
|
```
|
10
17
|
|
18
|
+
Note: You must tell Bundler not to automatically require the file (by using `require: false`),
|
19
|
+
otherwise the gem will try to load the Capistrano tasks outside of the context of running
|
20
|
+
the `cap` command (e.g. running `rails console`).
|
21
|
+
|
11
22
|
### In your deploy.rb:
|
12
23
|
|
13
24
|
```
|
@@ -15,6 +26,13 @@ role :resque_worker, "app_domain"
|
|
15
26
|
role :resque_scheduler, "app_domain"
|
16
27
|
|
17
28
|
set :workers, { "my_queue_name" => 2 }
|
29
|
+
|
30
|
+
# To ensure resque can start/stop properly between deploys, you'll want to make
|
31
|
+
# sure to link the `tmp/pids` directory.
|
32
|
+
set :linked_dirs, %w(tmp/pids)
|
33
|
+
|
34
|
+
# Uncomment this line if your workers need access to the Rails environment:
|
35
|
+
# set :resque_environment_task, true
|
18
36
|
```
|
19
37
|
|
20
38
|
You can also specify multiple queues and the number of workers
|
@@ -30,6 +48,48 @@ The above will start five workers in total:
|
|
30
48
|
* one listening on the `search_index, cache_warming` queue
|
31
49
|
* three listening on the `mailing` queue
|
32
50
|
|
51
|
+
### Multiple Servers/Roles
|
52
|
+
|
53
|
+
You can also start up workers on multiple servers/roles:
|
54
|
+
|
55
|
+
```
|
56
|
+
role :worker_server_A, <server-ip-A>
|
57
|
+
role :worker_servers_B_and_C, [<server-ip-B>, <server-ip-C>]
|
58
|
+
|
59
|
+
set :workers, {
|
60
|
+
worker_server_A: {
|
61
|
+
"archive" => 1,
|
62
|
+
"mailing" => 1
|
63
|
+
},
|
64
|
+
worker_servers_B_and_C: {
|
65
|
+
"search_index" => 1,
|
66
|
+
}
|
67
|
+
}
|
68
|
+
```
|
69
|
+
|
70
|
+
The above will start four workers in total:
|
71
|
+
|
72
|
+
* one `archive` on Server A
|
73
|
+
* one `mailing` on Server A
|
74
|
+
* one `search_index` on Server B
|
75
|
+
* one `search_index` on Server C
|
76
|
+
|
77
|
+
### Rails Environment
|
78
|
+
|
79
|
+
With Rails, Resque requires loading the Rails environment task to have access to your models, etc. (e.g. `QUEUE=* rake environment resque:work`). However, Resque is often used without Rails (and even if you are using Rails, you may not need/want to load the Rails environment). As such, the `environment` task is not automatically included.
|
80
|
+
|
81
|
+
If you would like to load the `environment` task automatically, add this to your `deploy.rb`:
|
82
|
+
|
83
|
+
```
|
84
|
+
set :resque_environment_task, true
|
85
|
+
```
|
86
|
+
|
87
|
+
If you would like your workers to use a different Rails environment than your actual Rails app:
|
88
|
+
|
89
|
+
```
|
90
|
+
set :resque_rails_env, "my_resque_env"
|
91
|
+
```
|
92
|
+
|
33
93
|
### The tasks
|
34
94
|
|
35
95
|
Running cap -vT | grep resque should give you...
|
@@ -53,6 +113,7 @@ add the following line to your `deploy.rb`:
|
|
53
113
|
```
|
54
114
|
after "deploy:restart", "resque:restart"
|
55
115
|
```
|
116
|
+
|
56
117
|
### Logging
|
57
118
|
|
58
119
|
Backgrounding and logging are current sticking points. I'm using the HEAD of resque's 1-x-stable branch for the 0.0.8 release because it has some new logging functions not yet slated for a resque release.
|
@@ -60,7 +121,7 @@ Backgrounding and logging are current sticking points. I'm using the HEAD of res
|
|
60
121
|
In your Gemfile, you will need to specify:
|
61
122
|
|
62
123
|
```
|
63
|
-
gem 'resque', :git => 'git://github.com/
|
124
|
+
gem 'resque', :git => 'git://github.com/resque/resque.git', :branch => '1-x-stable'
|
64
125
|
```
|
65
126
|
|
66
127
|
Also, you will need to include:
|
@@ -73,11 +134,21 @@ Resque.logger = Logger.new("new_resque_log_file")
|
|
73
134
|
|
74
135
|
The chatter on: https://github.com/defunkt/resque/pull/450 gives more information. If using HEAD of this resque branch doesn't work for you, then pin to v0.0.7 of this project.
|
75
136
|
|
137
|
+
### Redirecting output
|
138
|
+
|
139
|
+
Due to issues in the way Resque 1.x handles background processes, we automatically redirect stderr and stdout to `/dev/null`.
|
140
|
+
|
141
|
+
If you'd like to capture this output instead, just specify a log file:
|
142
|
+
|
143
|
+
```ruby
|
144
|
+
set :resque_log_file, "log/resque.log"
|
145
|
+
```
|
146
|
+
|
76
147
|
### Limitations
|
77
148
|
|
78
|
-
Starting workers is done
|
149
|
+
Starting workers is done concurrently via Capistrano and you are limited by ssh connections limit on your server (default limit is 10)
|
79
150
|
|
80
|
-
|
151
|
+
To to use more workers, please change your sshd configuration (/etc/ssh/sshd_config)
|
81
152
|
|
82
153
|
MaxStartups 100
|
83
154
|
|
data/lib/capistrano-resque.rb
CHANGED
@@ -1,2 +1,8 @@
|
|
1
1
|
require "capistrano-resque/version"
|
2
|
-
|
2
|
+
|
3
|
+
if defined?(Capistrano::VERSION) && Gem::Version.new(Capistrano::VERSION).release >= Gem::Version.new("3.0.0")
|
4
|
+
load File.expand_path("../capistrano-resque/tasks/capistrano-resque.rake", __FILE__)
|
5
|
+
else
|
6
|
+
require "capistrano-resque/capistrano_integration"
|
7
|
+
end
|
8
|
+
|
@@ -9,6 +9,16 @@ module CapistranoResque
|
|
9
9
|
_cset(:workers, {"*" => 1})
|
10
10
|
_cset(:resque_kill_signal, "QUIT")
|
11
11
|
_cset(:interval, "5")
|
12
|
+
_cset(:resque_environment_task, false)
|
13
|
+
_cset(:resque_log_file, "/dev/null")
|
14
|
+
|
15
|
+
def rails_env
|
16
|
+
fetch(:resque_rails_env, fetch(:rails_env, "production"))
|
17
|
+
end
|
18
|
+
|
19
|
+
def output_redirection
|
20
|
+
">> #{fetch(:resque_log_file)} 2>> #{fetch(:resque_log_file)}"
|
21
|
+
end
|
12
22
|
|
13
23
|
def workers_roles
|
14
24
|
return workers.keys if workers.first[1].is_a? Hash
|
@@ -35,26 +45,41 @@ module CapistranoResque
|
|
35
45
|
def start_command(queue, pid)
|
36
46
|
"cd #{current_path} && RAILS_ENV=#{rails_env} QUEUE=\"#{queue}\" \
|
37
47
|
PIDFILE=#{pid} BACKGROUND=yes VERBOSE=1 INTERVAL=#{interval} \
|
38
|
-
#{fetch(:bundle_cmd, "bundle")} exec rake
|
48
|
+
#{fetch(:bundle_cmd, "bundle")} exec rake \
|
49
|
+
#{"environment" if fetch(:resque_environment_task)} \
|
50
|
+
resque:work #{output_redirection}"
|
39
51
|
end
|
40
52
|
|
41
53
|
def stop_command
|
42
54
|
"if [ -e #{current_path}/tmp/pids/resque_work_1.pid ]; then \
|
43
55
|
for f in `ls #{current_path}/tmp/pids/resque_work*.pid`; \
|
44
|
-
do
|
45
|
-
|
56
|
+
do \
|
57
|
+
if kill -0 `cat $f`> /dev/null 2>&1; then \
|
58
|
+
kill -s #{resque_kill_signal} `cat $f` \
|
59
|
+
&& rm $f \
|
60
|
+
;else \
|
61
|
+
echo 'Resque was not running, cleaning up stale PID file' \
|
62
|
+
&& rm $f \
|
63
|
+
;fi \
|
64
|
+
;done \
|
65
|
+
;fi"
|
66
|
+
end
|
67
|
+
|
68
|
+
def status_scheduler
|
69
|
+
"if [ -e #{current_path}/tmp/pids/scheduler.pid ]; then \
|
70
|
+
ps -p $(cat #{current_path}/tmp/pids/scheduler.pid) | sed -n 2p \
|
46
71
|
;fi"
|
47
72
|
end
|
48
73
|
|
49
74
|
def start_scheduler(pid)
|
50
75
|
"cd #{current_path} && RAILS_ENV=#{rails_env} \
|
51
|
-
PIDFILE=#{pid} BACKGROUND=yes VERBOSE=1 \
|
52
|
-
#{fetch(:bundle_cmd, "bundle")} exec rake resque:scheduler"
|
76
|
+
PIDFILE=#{pid} BACKGROUND=yes VERBOSE=1 MUTE=1 \
|
77
|
+
#{fetch(:bundle_cmd, "bundle")} exec rake resque:scheduler #{output_redirection}"
|
53
78
|
end
|
54
79
|
|
55
80
|
def stop_scheduler(pid)
|
56
81
|
"if [ -e #{pid} ]; then \
|
57
|
-
#{
|
82
|
+
kill -s #{resque_kill_signal} $(cat #{pid}) ; rm #{pid} \
|
58
83
|
;fi"
|
59
84
|
end
|
60
85
|
|
@@ -99,6 +124,11 @@ module CapistranoResque
|
|
99
124
|
end
|
100
125
|
|
101
126
|
namespace :scheduler do
|
127
|
+
desc "See current scheduler status"
|
128
|
+
task :status, :roles => :resque_scheduler do
|
129
|
+
run(status_scheduler)
|
130
|
+
end
|
131
|
+
|
102
132
|
desc "Starts resque scheduler with default configs"
|
103
133
|
task :start, :roles => :resque_scheduler do
|
104
134
|
pid = "#{current_path}/tmp/pids/scheduler.pid"
|
@@ -0,0 +1,141 @@
|
|
1
|
+
namespace :load do
|
2
|
+
task :defaults do
|
3
|
+
set :workers, {"*" => 1}
|
4
|
+
set :resque_kill_signal, "QUIT"
|
5
|
+
set :interval, "5"
|
6
|
+
set :resque_environment_task, false
|
7
|
+
set :resque_log_file, "/dev/null"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
namespace :resque do
|
12
|
+
def rails_env
|
13
|
+
fetch(:resque_rails_env) ||
|
14
|
+
fetch(:rails_env) || # capistrano-rails doesn't automatically set this (yet),
|
15
|
+
fetch(:stage) # so we need to fall back to the stage.
|
16
|
+
end
|
17
|
+
|
18
|
+
def output_redirection
|
19
|
+
">> #{fetch(:resque_log_file)} 2>> #{fetch(:resque_log_file)}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def workers_roles
|
23
|
+
return fetch(:workers).keys if fetch(:workers).first[1].is_a? Hash
|
24
|
+
[:resque_worker]
|
25
|
+
end
|
26
|
+
|
27
|
+
def for_each_workers(&block)
|
28
|
+
if fetch(:workers).first[1].is_a? Hash
|
29
|
+
workers_roles.each do |role|
|
30
|
+
yield(role.to_sym, fetch(:workers)[role.to_sym])
|
31
|
+
end
|
32
|
+
else
|
33
|
+
yield(:resque_worker, fetch(:workers))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "See current worker status"
|
38
|
+
task :status do
|
39
|
+
on roles(*workers_roles) do
|
40
|
+
if test "[ -e #{current_path}/tmp/pids/resque_work_1.pid ]"
|
41
|
+
within current_path do
|
42
|
+
files = capture(:ls, "-1 tmp/pids/resque_work*.pid")
|
43
|
+
files.each_line do |file|
|
44
|
+
info capture(:ps, "-f -p $(cat #{file.chomp}) | sed -n 2p")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
desc "Start Resque workers"
|
52
|
+
task :start do
|
53
|
+
for_each_workers do |role, workers|
|
54
|
+
on roles(role) do
|
55
|
+
worker_id = 1
|
56
|
+
workers.each_pair do |queue, number_of_workers|
|
57
|
+
info "Starting #{number_of_workers} worker(s) with QUEUE: #{queue}"
|
58
|
+
number_of_workers.times do
|
59
|
+
pid = "./tmp/pids/resque_work_#{worker_id}.pid"
|
60
|
+
within current_path do
|
61
|
+
execute :rake, %{RAILS_ENV=#{rails_env} QUEUE="#{queue}" PIDFILE=#{pid} BACKGROUND=yes VERBOSE=1 INTERVAL=#{fetch(:interval)} #{"environment" if fetch(:resque_environment_task)} resque:work #{output_redirection}}
|
62
|
+
end
|
63
|
+
worker_id += 1
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# See https://github.com/defunkt/resque#signals for a descriptions of signals
|
71
|
+
# QUIT - Wait for child to finish processing then exit (graceful)
|
72
|
+
# TERM / INT - Immediately kill child then exit (stale or stuck)
|
73
|
+
# USR1 - Immediately kill child but don't exit (stale or stuck)
|
74
|
+
# USR2 - Don't start to process any new jobs (pause)
|
75
|
+
# CONT - Start to process new jobs again after a USR2 (resume)
|
76
|
+
desc "Quit running Resque workers"
|
77
|
+
task :stop do
|
78
|
+
on roles(*workers_roles) do
|
79
|
+
if test "[ -e #{current_path}/tmp/pids/resque_work_1.pid ]"
|
80
|
+
within current_path do
|
81
|
+
pids = capture(:ls, "-1 tmp/pids/resque_work*.pid").lines.map(&:chomp)
|
82
|
+
pids.each do |pid_file|
|
83
|
+
pid = capture(:cat, pid_file)
|
84
|
+
if test "kill -0 #{pid} > /dev/null 2>&1"
|
85
|
+
execute :kill, "-s #{fetch(:resque_kill_signal)} #{pid} && rm #{pid_file}"
|
86
|
+
else
|
87
|
+
info "Process #{pid} from #{pid_file} is not running, cleaning up stale PID file"
|
88
|
+
execute :rm, pid_file
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
else
|
93
|
+
info "No resque PID files found"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
desc "Restart running Resque workers"
|
99
|
+
task :restart do
|
100
|
+
invoke "resque:stop"
|
101
|
+
invoke "resque:start"
|
102
|
+
end
|
103
|
+
|
104
|
+
namespace :scheduler do
|
105
|
+
desc "See current scheduler status"
|
106
|
+
task :status do
|
107
|
+
on roles :resque_scheduler do
|
108
|
+
pid = "#{current_path}/tmp/pids/scheduler.pid"
|
109
|
+
if test "[ -e #{pid} ]"
|
110
|
+
info capture(:ps, "-f -p $(cat #{pid}) | sed -n 2p")
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
desc "Starts resque scheduler with default configs"
|
116
|
+
task :start do
|
117
|
+
on roles :resque_scheduler do
|
118
|
+
pid = "#{current_path}/tmp/pids/scheduler.pid"
|
119
|
+
within current_path do
|
120
|
+
execute :rake, %{RAILS_ENV=#{rails_env} PIDFILE=#{pid} BACKGROUND=yes VERBOSE=1 MUTE=1 resque:scheduler #{output_redirection}}
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
desc "Stops resque scheduler"
|
126
|
+
task :stop do
|
127
|
+
on roles :resque_scheduler do
|
128
|
+
pid = "#{current_path}/tmp/pids/scheduler.pid"
|
129
|
+
if test "[ -e #{pid} ]"
|
130
|
+
execute :kill, "-s #{fetch(:resque_kill_signal)} $(cat #{pid}); rm #{pid}"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
task :restart do
|
136
|
+
invoke "resque:scheduler:stop"
|
137
|
+
invoke "resque:scheduler:start"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
metadata
CHANGED
@@ -1,62 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-resque
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Steven Shingler
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-07-25 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: capistrano
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: resque
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: resque-scheduler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ">="
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
description: Capistrano plugin that integrates Resque server tasks.
|
@@ -65,7 +58,7 @@ executables: []
|
|
65
58
|
extensions: []
|
66
59
|
extra_rdoc_files: []
|
67
60
|
files:
|
68
|
-
- .gitignore
|
61
|
+
- ".gitignore"
|
69
62
|
- Changelog.md
|
70
63
|
- Gemfile
|
71
64
|
- Gemfile.lock
|
@@ -75,29 +68,29 @@ files:
|
|
75
68
|
- capistrano-resque.gemspec
|
76
69
|
- lib/capistrano-resque.rb
|
77
70
|
- lib/capistrano-resque/capistrano_integration.rb
|
71
|
+
- lib/capistrano-resque/tasks/capistrano-resque.rake
|
78
72
|
- lib/capistrano-resque/version.rb
|
79
73
|
homepage: https://github.com/sshingler/capistrano-resque
|
80
74
|
licenses: []
|
75
|
+
metadata: {}
|
81
76
|
post_install_message:
|
82
77
|
rdoc_options: []
|
83
78
|
require_paths:
|
84
79
|
- lib
|
85
80
|
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
-
none: false
|
87
81
|
requirements:
|
88
|
-
- -
|
82
|
+
- - ">="
|
89
83
|
- !ruby/object:Gem::Version
|
90
84
|
version: '0'
|
91
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
-
none: false
|
93
86
|
requirements:
|
94
|
-
- -
|
87
|
+
- - ">="
|
95
88
|
- !ruby/object:Gem::Version
|
96
89
|
version: '0'
|
97
90
|
requirements: []
|
98
91
|
rubyforge_project:
|
99
|
-
rubygems_version:
|
92
|
+
rubygems_version: 2.4.1
|
100
93
|
signing_key:
|
101
|
-
specification_version:
|
94
|
+
specification_version: 4
|
102
95
|
summary: Resque integration for Capistrano
|
103
96
|
test_files: []
|