capistrano-delayed-job 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE.md +19 -0
- data/README.md +115 -0
- data/Rakefile +1 -0
- data/capistrano-delayed-job.gemspec +35 -0
- data/lib/capistrano-delayed-job.rb +0 -0
- data/lib/capistrano/delayed_job.rb +2 -0
- data/lib/capistrano/delayed_job/helpers.rb +38 -0
- data/lib/capistrano/delayed_job/version.rb +5 -0
- data/lib/capistrano/dsl/delayed_job_paths.rb +15 -0
- data/lib/capistrano/tasks/delayed_job.rake +52 -0
- data/lib/generators/capistrano/delayed_job/USAGE.md +9 -0
- data/lib/generators/capistrano/delayed_job/config_generator.rb +17 -0
- data/lib/generators/capistrano/delayed_job/templates/delayed_job_init.erb +48 -0
- metadata +119 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c7bad2495a9ab3aa196b5baa2a60a3f1bf1cd647
|
4
|
+
data.tar.gz: 360b7828d6f2cb4e0aea819569173c286d2b975f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e73baaf94c73eeadb5594e73da815f1f0a7ba5e0c4250f747e405639e41832e837328e25cbba201d21ecd9ecbad38572ef4abc3d8263563d7dfd608711fabc79
|
7
|
+
data.tar.gz: ec6d5df4eb93dfede6e36994f2d3c6552a881870a7c89d87b3c6e80a60fc550526553f753b8233f4180e0d839d5943f6e896508983393239b23f8e20ee68bff7
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2014 Ruben Stranders
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the "Software"),
|
5
|
+
to deal in the Software without restriction, including without limitation
|
6
|
+
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
7
|
+
and/or sell copies of the Software, and to permit persons to whom the
|
8
|
+
Software is furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included
|
11
|
+
in all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
14
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
15
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
16
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
17
|
+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
18
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
19
|
+
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
# Capistrano::DelayedJob
|
2
|
+
|
3
|
+
Capistrano tasks for automatic DelayedJob configuration.
|
4
|
+
|
5
|
+
Goals of this plugin:
|
6
|
+
|
7
|
+
* automatic DelayedJob configuration for Rails apps
|
8
|
+
* **no manual ssh** to the server required
|
9
|
+
|
10
|
+
Specifics:
|
11
|
+
|
12
|
+
* generates an init script on the server for Delayed job
|
13
|
+
* capistrano tasks for management, example: `delayed_job:restart`<br/>
|
14
|
+
see below for all available tasks
|
15
|
+
|
16
|
+
`capistrano-delayed-job` works only with Capistrano 3!
|
17
|
+
|
18
|
+
Inspired by
|
19
|
+
[capistrano-nginx-unicorn](https://github.com/bruno-/capistrano-nginx-unicorn) and [capistrano-recipes](https://github.com/mattdbridges/capistrano-recipes).
|
20
|
+
|
21
|
+
### Installation
|
22
|
+
|
23
|
+
Add this to `Gemfile`:
|
24
|
+
|
25
|
+
group :development do
|
26
|
+
gem 'capistrano', '~> 3.1'
|
27
|
+
gem 'capistrano-delayed-job', '~> 1.0'
|
28
|
+
end
|
29
|
+
|
30
|
+
And then:
|
31
|
+
|
32
|
+
$ bundle install
|
33
|
+
|
34
|
+
### Setup and usage
|
35
|
+
|
36
|
+
Add this line to `Capfile`
|
37
|
+
|
38
|
+
require 'capistrano/delayed_job'
|
39
|
+
|
40
|
+
**Setup task**
|
41
|
+
|
42
|
+
Make sure the `deploy_to` path exists and has the right privileges on the
|
43
|
+
server (i.e. `/var/www/myapp`).<br/>
|
44
|
+
Or just install
|
45
|
+
[capistrano-safe-deploy-to](https://github.com/bruno-/capistrano-safe-deploy-to)
|
46
|
+
plugin and don't think about it.
|
47
|
+
|
48
|
+
To setup the DelayedJob on the servers with the `delayed_job_server_role` (default `:app`) run:
|
49
|
+
|
50
|
+
$ bundle exec cap production setup
|
51
|
+
|
52
|
+
This will generate the init script for delayed job.
|
53
|
+
|
54
|
+
### Configuration
|
55
|
+
|
56
|
+
As described in the Usage section, this plugin works with minimal setup.
|
57
|
+
However, configuration is possible.
|
58
|
+
|
59
|
+
You'll find the options and their defaults below.
|
60
|
+
|
61
|
+
In order to override the default, put the option in the stage file, for example:
|
62
|
+
|
63
|
+
# in config/deploy/production.rb
|
64
|
+
set :delayed_job_workers, 10
|
65
|
+
|
66
|
+
Defaults are listed near option name in the first line.
|
67
|
+
|
68
|
+
* `set :delayed_job_workers` # defaults to 1<br/>
|
69
|
+
The number of workers to run on each server.
|
70
|
+
|
71
|
+
* `set :delayed_job_server_roles, "[:app]"`<br/>
|
72
|
+
The roles on which the DelayedJob should run.
|
73
|
+
|
74
|
+
* `set :delayed_job_service, -> { "delayed_job_#{fetch(:application)}_#{fetch(:stage)}" }`<br/>
|
75
|
+
The name of the service that DelayedJob uses.
|
76
|
+
|
77
|
+
### Template customization
|
78
|
+
|
79
|
+
If you want to change default templates, you can generate them using
|
80
|
+
`rails generator`:
|
81
|
+
|
82
|
+
$ bundle exec rails g capistrano:delayed_job:config
|
83
|
+
|
84
|
+
This will copy default templates to `config/deploy/templates` directory, so you
|
85
|
+
can customize them as you like, and capistrano tasks will use this templates
|
86
|
+
instead of default.
|
87
|
+
|
88
|
+
You can also provide path, where to generate templates:
|
89
|
+
|
90
|
+
$ bundle exec rails g capistrano:delayed_job:config config/templates
|
91
|
+
|
92
|
+
### More Capistrano automation?
|
93
|
+
|
94
|
+
If you'd like to streamline your Capistrano deploys, you might want to check
|
95
|
+
these zero-configuration, plug-n-play plugins:
|
96
|
+
|
97
|
+
- [capistrano-unicorn-nginx](https://github.com/bruno-/capistrano-unicorn-nginx)<br/>
|
98
|
+
no-configuration unicorn and nginx setup with sensible defaults
|
99
|
+
- [capistrano-postgresql](https://github.com/bruno-/capistrano-postgresql)<br/>
|
100
|
+
plugin that automates postgresql configuration and setup
|
101
|
+
- [capistrano-rbenv-install](https://github.com/bruno-/capistrano-rbenv-install)<br/>
|
102
|
+
would you like Capistrano to install rubies for you?
|
103
|
+
- [capistrano-safe-deploy-to](https://github.com/bruno-/capistrano-safe-deploy-to)<br/>
|
104
|
+
if you're annoyed that Capistrano does **not** create a deployment path for the
|
105
|
+
app on the server (default `/var/www/myapp`), this is what you need!
|
106
|
+
|
107
|
+
### Bug reports and pull requests
|
108
|
+
|
109
|
+
...are very welcome!
|
110
|
+
|
111
|
+
### Thanks
|
112
|
+
|
113
|
+
[@bruno-](https://github.com/bruno-) - for his
|
114
|
+
[capistrano-unicorn-nginx](https://github.com/bruno-/capistrano-unicorn-nginx) plugin on which this
|
115
|
+
one is based.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'capistrano/delayed_job/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "capistrano-delayed-job"
|
8
|
+
gem.version = Capistrano::DelayedJob::VERSION
|
9
|
+
gem.authors = ["Ruben Stranders"]
|
10
|
+
gem.email = ["r.stranders@gmail.com"]
|
11
|
+
gem.description = <<-EOF.gsub(/^\s+/, '')
|
12
|
+
Capistrano tasks for automatic and sensible DelayedJob configuration.
|
13
|
+
|
14
|
+
Enables zero downtime deployments of Rails applications. Configs can be
|
15
|
+
copied to the application using generators and easily customized.
|
16
|
+
|
17
|
+
Works *only* with Capistrano 3+.
|
18
|
+
|
19
|
+
Inspired by https://github.com/bruno-/capistrano-unicorn-nginx and http://bl.ocks.org/dv/10370719
|
20
|
+
EOF
|
21
|
+
gem.summary = "Capistrano tasks for automatic and sensible DelayedJob configuration."
|
22
|
+
gem.homepage = "https://github.com/capistrano-plugins/capistrano-delayed-job"
|
23
|
+
|
24
|
+
gem.files = `git ls-files`.split($/)
|
25
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
26
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
27
|
+
gem.require_paths = ["lib"]
|
28
|
+
|
29
|
+
gem.add_dependency "capistrano", ">= 3.1"
|
30
|
+
gem.add_dependency "sshkit", ">= 1.2.0"
|
31
|
+
|
32
|
+
gem.add_dependency "daemons", ">= 1.1"
|
33
|
+
|
34
|
+
gem.add_development_dependency "rake"
|
35
|
+
end
|
File without changes
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
module Capistrano
|
4
|
+
module DelayedJob
|
5
|
+
module Helpers
|
6
|
+
|
7
|
+
def bundle_delayed_job(*args)
|
8
|
+
SSHKit::Command.new(:bundle, :exec, "script/delayed_job", args).to_command
|
9
|
+
end
|
10
|
+
|
11
|
+
def dj_template(template_name)
|
12
|
+
config_file = "#{fetch(:templates_path)}/#{template_name}"
|
13
|
+
# if no customized file, proceed with default
|
14
|
+
unless File.exists?(config_file)
|
15
|
+
config_file = File.join(File.dirname(__FILE__), "../../generators/capistrano/delayed_job/templates/#{template_name}")
|
16
|
+
end
|
17
|
+
StringIO.new(ERB.new(File.read(config_file)).result(binding))
|
18
|
+
end
|
19
|
+
|
20
|
+
def file_exists?(path)
|
21
|
+
test "[ -e #{path} ]"
|
22
|
+
end
|
23
|
+
|
24
|
+
def deploy_user
|
25
|
+
capture :id, '-un'
|
26
|
+
end
|
27
|
+
|
28
|
+
def sudo_upload!(from, to)
|
29
|
+
filename = File.basename(to)
|
30
|
+
to_dir = File.dirname(to)
|
31
|
+
tmp_file = "#{fetch(:tmp_dir)}/#{filename}"
|
32
|
+
upload! from, tmp_file
|
33
|
+
sudo :mv, tmp_file, to_dir
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'capistrano/dsl/delayed_job_paths'
|
2
|
+
require 'capistrano/delayed_job/helpers'
|
3
|
+
|
4
|
+
include Capistrano::DelayedJob::Helpers
|
5
|
+
include Capistrano::DSL::DelayedJobPaths
|
6
|
+
|
7
|
+
namespace :load do
|
8
|
+
task :defaults do
|
9
|
+
set :delayed_job_workers, 1
|
10
|
+
set :delayed_job_service, -> { "delayed_job_#{fetch(:application)}_#{fetch(:stage)}" }
|
11
|
+
|
12
|
+
set :delayed_job_server_roles, [:app]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
namespace :delayed_job do
|
17
|
+
|
18
|
+
task :defaults do
|
19
|
+
on roles fetch(:delayed_job_server_roles) do
|
20
|
+
set :delayed_job_user, fetch(:delayed_job_user, deploy_user)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Setup DelayedJob initializer'
|
25
|
+
task :setup do
|
26
|
+
on roles fetch(:delayed_job_server_roles) do
|
27
|
+
sudo_upload! dj_template('delayed_job_init.erb'), delayed_job_initd_file
|
28
|
+
execute :chmod, '+x', delayed_job_initd_file
|
29
|
+
sudo 'update-rc.d', '-f', fetch(:delayed_job_service), 'defaults'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
before :setup, :defaults
|
34
|
+
|
35
|
+
%w[start stop restart].each do |command|
|
36
|
+
desc "#{command} delayed_job"
|
37
|
+
task command do
|
38
|
+
on roles fetch(:delayed_job_server_roles) do
|
39
|
+
sudo :service, "#{fetch(:delayed_job_service)} #{command}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
namespace :deploy do
|
46
|
+
after :publishing, 'delayed_job:restart'
|
47
|
+
end
|
48
|
+
|
49
|
+
desc 'Server setup tasks'
|
50
|
+
task :setup do
|
51
|
+
invoke 'delayed_job:setup'
|
52
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
To create local delayed_job configuration files call
|
2
|
+
|
3
|
+
bundle exec rails generate capistrano:delayed_job:config [path]
|
4
|
+
|
5
|
+
The default path is "config/deploy/templates". You can override it like so:
|
6
|
+
|
7
|
+
bundle rails generate capistrano:delayed_job:config "config/templates"
|
8
|
+
|
9
|
+
If you override templates path, don't forget to set "templates_path" variable in your deploy.rb
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Capistrano
|
2
|
+
module DelayedJob
|
3
|
+
module Generators
|
4
|
+
class ConfigGenerator < Rails::Generators::Base
|
5
|
+
desc "Create local DelayedJob configuration files for customization"
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
argument :templates_path, type: :string,
|
8
|
+
default: "config/deploy/templates",
|
9
|
+
banner: "path to templates"
|
10
|
+
|
11
|
+
def copy_template
|
12
|
+
copy_file "delayed_job_init.erb", "#{templates_path}/delayed_job_init.erb"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#! /bin/sh
|
2
|
+
|
3
|
+
### BEGIN INIT INFO
|
4
|
+
# Provides: delayed_job
|
5
|
+
# Required-Start: $remote_fs $syslog
|
6
|
+
# Required-Stop: $remote_fs $syslog
|
7
|
+
# Default-Start: 2 3 4 5
|
8
|
+
# Default-Stop: 0 1 6
|
9
|
+
# Short-Description: Manage delayed jobs for application <%= fetch(:application) %> , environment <%= fetch(:rails_env) %>
|
10
|
+
# Description: Start, stop, restart delayed jobs for application <%= fetch(:application) %>, environment <%= fetch(:rails_env) %>
|
11
|
+
### END INIT INFO
|
12
|
+
|
13
|
+
N=/etc/init.d/delayed_job
|
14
|
+
APP_ROOT=<%= current_path %>
|
15
|
+
AS_USER=<%= fetch(:delayed_job_user) %>
|
16
|
+
service="delayed_job"
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
set -e
|
21
|
+
|
22
|
+
interact() {
|
23
|
+
op="$1"
|
24
|
+
echo "Invoking DelayedJob with command '$op'"
|
25
|
+
CMD="cd $APP_ROOT && HOME=/home/$AS_USER RAILS_ENV=<%= fetch(:rails_env) %> nice -n 15 <%= bundle_delayed_job("$op -n", fetch(:delayed_job_workers))%>"
|
26
|
+
|
27
|
+
if [ "$(id -un)" = "$AS_USER" ]; then
|
28
|
+
eval $CMD
|
29
|
+
else
|
30
|
+
su -c "$CMD" - $AS_USER
|
31
|
+
fi
|
32
|
+
}
|
33
|
+
|
34
|
+
case "$1" in
|
35
|
+
start|stop)
|
36
|
+
interact "$1"
|
37
|
+
;;
|
38
|
+
reload|restart|force-reload)
|
39
|
+
interact "stop"
|
40
|
+
sleep 1s
|
41
|
+
interact "start"
|
42
|
+
;;
|
43
|
+
*)
|
44
|
+
usage
|
45
|
+
;;
|
46
|
+
esac
|
47
|
+
|
48
|
+
exit 0
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capistrano-delayed-job
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ruben Stranders
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-10-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: capistrano
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sshkit
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.2.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.2.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: daemons
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.1'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: |
|
70
|
+
Capistrano tasks for automatic and sensible DelayedJob configuration.
|
71
|
+
Enables zero downtime deployments of Rails applications. Configs can be
|
72
|
+
copied to the application using generators and easily customized.
|
73
|
+
Works *only* with Capistrano 3+.
|
74
|
+
Inspired by https://github.com/bruno-/capistrano-unicorn-nginx and http://bl.ocks.org/dv/10370719
|
75
|
+
email:
|
76
|
+
- r.stranders@gmail.com
|
77
|
+
executables: []
|
78
|
+
extensions: []
|
79
|
+
extra_rdoc_files: []
|
80
|
+
files:
|
81
|
+
- ".gitignore"
|
82
|
+
- Gemfile
|
83
|
+
- LICENSE.md
|
84
|
+
- README.md
|
85
|
+
- Rakefile
|
86
|
+
- capistrano-delayed-job.gemspec
|
87
|
+
- lib/capistrano-delayed-job.rb
|
88
|
+
- lib/capistrano/delayed_job.rb
|
89
|
+
- lib/capistrano/delayed_job/helpers.rb
|
90
|
+
- lib/capistrano/delayed_job/version.rb
|
91
|
+
- lib/capistrano/dsl/delayed_job_paths.rb
|
92
|
+
- lib/capistrano/tasks/delayed_job.rake
|
93
|
+
- lib/generators/capistrano/delayed_job/USAGE.md
|
94
|
+
- lib/generators/capistrano/delayed_job/config_generator.rb
|
95
|
+
- lib/generators/capistrano/delayed_job/templates/delayed_job_init.erb
|
96
|
+
homepage: https://github.com/capistrano-plugins/capistrano-delayed-job
|
97
|
+
licenses: []
|
98
|
+
metadata: {}
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
requirements: []
|
114
|
+
rubyforge_project:
|
115
|
+
rubygems_version: 2.2.2
|
116
|
+
signing_key:
|
117
|
+
specification_version: 4
|
118
|
+
summary: Capistrano tasks for automatic and sensible DelayedJob configuration.
|
119
|
+
test_files: []
|