capistrano-sidekiq 1.0.3 → 2.0.0.beta5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.tool-versions +1 -0
- data/README.md +19 -86
- data/capistrano-sidekiq.gemspec +2 -1
- data/lib/capistrano/sidekiq.rb +30 -1
- data/lib/capistrano/sidekiq/monit.rb +17 -1
- data/lib/capistrano/sidekiq/systemd.rb +14 -0
- data/lib/capistrano/sidekiq/upstart.rb +11 -0
- data/lib/capistrano/sidekiq/version.rb +1 -1
- data/lib/capistrano/tasks/sidekiq.rake +2 -268
- data/lib/capistrano/tasks/systemd.rake +135 -0
- data/lib/capistrano/tasks/upstart.rake +144 -0
- data/lib/generators/capistrano/sidekiq/systemd/templates/sidekiq.service.capistrano.erb +10 -3
- data/lib/generators/capistrano/sidekiq/upstart/templates/sidekiq.conf.erb +78 -0
- data/lib/generators/capistrano/sidekiq/upstart/templates/workers.conf.erb +37 -0
- metadata +25 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50c54a8decaa51b559addb7e9c1d5bfcbdc474cbac2d11054d1cfdc7a8753b1f
|
4
|
+
data.tar.gz: c7b60c5cdb1a19d3131ab83c2a6c2e1c54ddf51f9349969f1e3aac26b83de370
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb67be5724197a7499c41381fccf9f70db21a245957554a3a9a31f4d296c8bcb44a397db1e89cc1ac2116a804da924157a838e0a4958371d25d1cf905ef6f836
|
7
|
+
data.tar.gz: 773d1e88acaae73ed7c62cd3f49c038207d1cf124672fca77f7c7737320bdd037400f573d68edc64aa7f7045c44311a04d570dfd6aaea93dd487636c592be4d9
|
data/.tool-versions
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby 2.6.5
|
data/README.md
CHANGED
@@ -6,12 +6,6 @@ Sidekiq integration for Capistrano
|
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
9
|
-
Add this line to your application's Gemfile:
|
10
|
-
|
11
|
-
gem 'capistrano-sidekiq', github: 'seuros/capistrano-sidekiq'
|
12
|
-
|
13
|
-
or:
|
14
|
-
|
15
9
|
gem 'capistrano-sidekiq', group: :development
|
16
10
|
|
17
11
|
And then execute:
|
@@ -21,29 +15,34 @@ And then execute:
|
|
21
15
|
|
22
16
|
## Usage
|
23
17
|
```ruby
|
24
|
-
# Capfile
|
25
|
-
|
26
|
-
require 'capistrano/sidekiq
|
18
|
+
# Capfile
|
19
|
+
|
20
|
+
require 'capistrano/sidekiq'
|
21
|
+
install_plugin Capistrano::Sidekiq # Default sidekiq tasks
|
22
|
+
# Then select your service manager
|
23
|
+
install_plugin Capistrano::Sidekiq::Systemd
|
24
|
+
# or
|
25
|
+
install_plugin Capistrano::Sidekiq::Upstart # tests needed
|
26
|
+
# or
|
27
|
+
install_plugin Capistrano::Sidekiq::Monit # tests needed
|
27
28
|
```
|
28
29
|
|
29
30
|
|
30
31
|
Configurable options, shown here with defaults:
|
31
32
|
|
32
33
|
```ruby
|
34
|
+
:sidekiq_roles => :app
|
33
35
|
:sidekiq_default_hooks => true
|
34
36
|
:sidekiq_pid => File.join(shared_path, 'tmp', 'pids', 'sidekiq.pid') # ensure this path exists in production before deploying.
|
35
37
|
:sidekiq_env => fetch(:rack_env, fetch(:rails_env, fetch(:stage)))
|
36
38
|
:sidekiq_log => File.join(shared_path, 'log', 'sidekiq.log')
|
37
|
-
|
38
|
-
|
39
|
-
:
|
40
|
-
:
|
41
|
-
:
|
42
|
-
:
|
43
|
-
|
44
|
-
:sidekiq_processes => 1
|
45
|
-
:sidekiq_options_per_process => nil
|
46
|
-
:sidekiq_concurrency => nil
|
39
|
+
|
40
|
+
# sidekiq systemd options
|
41
|
+
:sidekiq_service_unit_name => 'sidekiq'
|
42
|
+
:sidekiq_service_unit_user => :user # :system
|
43
|
+
:sidekiq_enable_lingering => true
|
44
|
+
:sidekiq_lingering_user => nil
|
45
|
+
|
47
46
|
# sidekiq monit
|
48
47
|
:sidekiq_monit_templates_path => 'config/deploy/templates'
|
49
48
|
:sidekiq_monit_conf_dir => '/etc/monit/conf.d'
|
@@ -51,10 +50,8 @@ Configurable options, shown here with defaults:
|
|
51
50
|
:monit_bin => '/usr/bin/monit'
|
52
51
|
:sidekiq_monit_default_hooks => true
|
53
52
|
:sidekiq_monit_group => nil
|
54
|
-
:sidekiq_service_name => "sidekiq_#{fetch(:application)}
|
53
|
+
:sidekiq_service_name => "sidekiq_#{fetch(:application)}"
|
55
54
|
|
56
|
-
:sidekiq_cmd => "#{fetch(:bundle_cmd, "bundle")} exec sidekiq" # Only for capistrano2.5
|
57
|
-
:sidekiqctl_cmd => "#{fetch(:bundle_cmd, "bundle")} exec sidekiqctl" # Only for capistrano2.5
|
58
55
|
:sidekiq_user => nil #user to run sidekiq as
|
59
56
|
```
|
60
57
|
|
@@ -74,70 +71,6 @@ SSHKit.config.command_map[:sidekiq] = "bundle exec sidekiq"
|
|
74
71
|
SSHKit.config.command_map[:sidekiqctl] = "bundle exec sidekiqctl"
|
75
72
|
```
|
76
73
|
|
77
|
-
## Multiple processes
|
78
|
-
|
79
|
-
You can configure sidekiq to start with multiple processes. Just set the proper amount in `sidekiq_processes`.
|
80
|
-
|
81
|
-
You can also customize the configuration for every process. If you want to do that, just set
|
82
|
-
`sidekiq_options_per_process` with an array of the configuration options that you want in string format.
|
83
|
-
This example should boot the first process with the queue `high` and the second one with the queues `default`
|
84
|
-
and `low`:
|
85
|
-
|
86
|
-
```ruby
|
87
|
-
set :sidekiq_processes, 2
|
88
|
-
set :sidekiq_options_per_process, ["--queue high", "--queue default --queue low"]
|
89
|
-
```
|
90
|
-
|
91
|
-
## Different number of processes per role
|
92
|
-
|
93
|
-
You can configure how many processes you want to run on each host next way:
|
94
|
-
|
95
|
-
```ruby
|
96
|
-
set :sidekiq_roles, [:sidekiq_small, :sidekiq_big]
|
97
|
-
set :sidekiq_small_processes, 1
|
98
|
-
set :sidekiq_big_processes, 4
|
99
|
-
server 'example-small.com', roles: [:sidekiq_small]
|
100
|
-
server 'example-big.com', roles: [:sidekiq_big]
|
101
|
-
```
|
102
|
-
|
103
|
-
## Integration with systemd
|
104
|
-
|
105
|
-
Set init system to systemd in the cap deploy config:
|
106
|
-
|
107
|
-
```ruby
|
108
|
-
set :init_system, :systemd
|
109
|
-
```
|
110
|
-
|
111
|
-
Enable lingering for systemd user account
|
112
|
-
|
113
|
-
```
|
114
|
-
loginctl enable-linger USERACCOUNT
|
115
|
-
```
|
116
|
-
|
117
|
-
Install systemd.service template file and enable the service with:
|
118
|
-
|
119
|
-
```
|
120
|
-
bundle exec cap sidekiq:install
|
121
|
-
```
|
122
|
-
|
123
|
-
Default name for the service file is `sidekiq-stage.service`. This can be changed as needed, for example:
|
124
|
-
|
125
|
-
```ruby
|
126
|
-
set :service_unit_name, "sidekiq-#{fetch(:application)}-#{fetch(:stage)}.service"
|
127
|
-
```
|
128
|
-
|
129
|
-
## Integration with upstart
|
130
|
-
|
131
|
-
Set init system to upstart in the cap deploy config:
|
132
|
-
|
133
|
-
```ruby
|
134
|
-
set :init_system, :upstart
|
135
|
-
```
|
136
|
-
|
137
|
-
Set upstart service name:
|
138
|
-
```ruby
|
139
|
-
set :upstart_service_name, 'sidekiq'
|
140
|
-
```
|
141
74
|
|
142
75
|
## Customizing the monit sidekiq templates
|
143
76
|
|
data/capistrano-sidekiq.gemspec
CHANGED
data/lib/capistrano/sidekiq.rb
CHANGED
@@ -1 +1,30 @@
|
|
1
|
-
|
1
|
+
require 'capistrano/bundler'
|
2
|
+
require "capistrano/plugin"
|
3
|
+
|
4
|
+
module Capistrano
|
5
|
+
class Sidekiq < Capistrano::Plugin
|
6
|
+
def define_tasks
|
7
|
+
eval_rakefile File.expand_path('../tasks/sidekiq.rake', __FILE__)
|
8
|
+
end
|
9
|
+
|
10
|
+
def set_defaults
|
11
|
+
set_if_empty :sidekiq_default_hooks, true
|
12
|
+
|
13
|
+
set_if_empty :sidekiq_env, -> { fetch(:rack_env, fetch(:rails_env, fetch(:rake_env, fetch(:stage)))) }
|
14
|
+
set_if_empty :sidekiq_roles, fetch(:sidekiq_role, :app)
|
15
|
+
set_if_empty :sidekiq_log, -> { File.join(shared_path, 'log', 'sidekiq.log') }
|
16
|
+
set_if_empty :sidekiq_error_log, -> { File.join(shared_path, 'log', 'sidekiq.error.log') }
|
17
|
+
# Rbenv, Chruby, and RVM integration
|
18
|
+
append :rbenv_map_bins, 'sidekiq', 'sidekiqctl'
|
19
|
+
append :rvm_map_bins, 'sidekiq', 'sidekiqctl'
|
20
|
+
append :chruby_map_bins, 'sidekiq', 'sidekiqctl'
|
21
|
+
# Bundler integration
|
22
|
+
append :bundle_bins, 'sidekiq', 'sidekiqctl'
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
require_relative 'sidekiq/systemd'
|
29
|
+
require_relative 'sidekiq/upstart'
|
30
|
+
require_relative 'sidekiq/monit'
|
@@ -1 +1,17 @@
|
|
1
|
-
|
1
|
+
module Capistrano
|
2
|
+
class Sidekiq::Monit < Capistrano::Plugin
|
3
|
+
def set_defaults
|
4
|
+
set_if_empty :monit_bin, '/usr/bin/monit'
|
5
|
+
set_if_empty :sidekiq_monit_conf_dir, '/etc/monit/conf.d'
|
6
|
+
set_if_empty :sidekiq_monit_conf_file, -> { "#{sidekiq_service_name}.conf" }
|
7
|
+
set_if_empty :sidekiq_monit_use_sudo, true
|
8
|
+
set_if_empty :sidekiq_monit_default_hooks, true
|
9
|
+
set_if_empty :sidekiq_monit_templates_path, 'config/deploy/templates'
|
10
|
+
set_if_empty :sidekiq_monit_group, nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def define_tasks
|
14
|
+
eval_rakefile File.expand_path('../../tasks/monit.rake', __FILE__)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Capistrano
|
2
|
+
class Sidekiq::Systemd < Capistrano::Plugin
|
3
|
+
def set_defaults
|
4
|
+
set_if_empty :sidekiq_service_unit_name, 'sidekiq'
|
5
|
+
set_if_empty :sidekiq_service_unit_user, :user # :system
|
6
|
+
set_if_empty :sidekiq_enable_lingering, true
|
7
|
+
set_if_empty :sidekiq_lingering_user, nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def define_tasks
|
11
|
+
eval_rakefile File.expand_path('../../tasks/systemd.rake', __FILE__)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,29 +1,3 @@
|
|
1
|
-
namespace :load do
|
2
|
-
task :defaults do
|
3
|
-
set :sidekiq_default_hooks, true
|
4
|
-
|
5
|
-
set :sidekiq_pid, -> { File.join(shared_path, 'tmp', 'pids', 'sidekiq.pid') }
|
6
|
-
set :sidekiq_env, -> { fetch(:rack_env, fetch(:rails_env, fetch(:stage))) }
|
7
|
-
set :sidekiq_log, -> { File.join(shared_path, 'log', 'sidekiq.log') }
|
8
|
-
set :sidekiq_timeout, 10
|
9
|
-
set :sidekiq_roles, fetch(:sidekiq_role, :app)
|
10
|
-
set :sidekiq_processes, 1
|
11
|
-
set :sidekiq_options_per_process, nil
|
12
|
-
set :sidekiq_user, nil
|
13
|
-
# Rbenv, Chruby, and RVM integration
|
14
|
-
set :rbenv_map_bins, fetch(:rbenv_map_bins).to_a.concat(%w[sidekiq sidekiqctl])
|
15
|
-
set :rvm_map_bins, fetch(:rvm_map_bins).to_a.concat(%w[sidekiq sidekiqctl])
|
16
|
-
set :chruby_map_bins, fetch(:chruby_map_bins).to_a.concat(%w[sidekiq sidekiqctl])
|
17
|
-
# Bundler integration
|
18
|
-
set :bundle_bins, fetch(:bundle_bins).to_a.concat(%w[sidekiq sidekiqctl])
|
19
|
-
# Init system integration
|
20
|
-
set :init_system, -> { nil }
|
21
|
-
# systemd integration
|
22
|
-
set :service_unit_name, "sidekiq-#{fetch(:stage)}.service"
|
23
|
-
set :upstart_service_name, "sidekiq"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
1
|
namespace :deploy do
|
28
2
|
before :starting, :check_sidekiq_hooks do
|
29
3
|
invoke 'sidekiq:add_default_hooks' if fetch(:sidekiq_default_hooks)
|
@@ -32,255 +6,15 @@ end
|
|
32
6
|
|
33
7
|
namespace :sidekiq do
|
34
8
|
task :add_default_hooks do
|
35
|
-
after 'deploy:starting',
|
36
|
-
after 'deploy:updated',
|
9
|
+
after 'deploy:starting', 'sidekiq:quiet'
|
10
|
+
after 'deploy:updated', 'sidekiq:stop'
|
37
11
|
after 'deploy:published', 'sidekiq:start'
|
38
12
|
after 'deploy:failed', 'sidekiq:restart'
|
39
13
|
end
|
40
14
|
|
41
|
-
desc 'Quiet sidekiq (stop fetching new tasks from Redis)'
|
42
|
-
task :quiet do
|
43
|
-
on roles fetch(:sidekiq_roles) do |role|
|
44
|
-
switch_user(role) do
|
45
|
-
case fetch(:init_system)
|
46
|
-
when :systemd
|
47
|
-
execute :systemctl, "--user", "reload", fetch(:service_unit_name), raise_on_non_zero_exit: false
|
48
|
-
when :upstart
|
49
|
-
sudo :service, fetch(:upstart_service_name), :reload
|
50
|
-
else
|
51
|
-
if test("[ -d #{release_path} ]")
|
52
|
-
each_process_with_index(reverse: true) do |pid_file, _idx|
|
53
|
-
if pid_file_exists?(pid_file) && process_exists?(pid_file)
|
54
|
-
quiet_sidekiq(pid_file)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
desc 'Stop sidekiq (graceful shutdown within timeout, put unfinished tasks back to Redis)'
|
64
|
-
task :stop do
|
65
|
-
on roles fetch(:sidekiq_roles) do |role|
|
66
|
-
switch_user(role) do
|
67
|
-
case fetch(:init_system)
|
68
|
-
when :systemd
|
69
|
-
execute :systemctl, "--user", "stop", fetch(:service_unit_name)
|
70
|
-
when :upstart
|
71
|
-
sudo :service, fetch(:upstart_service_name), :stop
|
72
|
-
else
|
73
|
-
if test("[ -d #{release_path} ]")
|
74
|
-
each_process_with_index(reverse: true) do |pid_file, _idx|
|
75
|
-
if pid_file_exists?(pid_file) && process_exists?(pid_file)
|
76
|
-
stop_sidekiq(pid_file)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
desc 'Start sidekiq'
|
86
|
-
task :start do
|
87
|
-
on roles fetch(:sidekiq_roles) do |role|
|
88
|
-
switch_user(role) do
|
89
|
-
case fetch(:init_system)
|
90
|
-
when :systemd
|
91
|
-
execute :systemctl, '--user', 'start', fetch(:service_unit_name)
|
92
|
-
when :upstart
|
93
|
-
sudo :service, fetch(:upstart_service_name), :start
|
94
|
-
else
|
95
|
-
each_process_with_index do |pid_file, idx|
|
96
|
-
unless pid_file_exists?(pid_file) && process_exists?(pid_file)
|
97
|
-
start_sidekiq(pid_file, idx)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
15
|
desc 'Restart sidekiq'
|
106
16
|
task :restart do
|
107
17
|
invoke! 'sidekiq:stop'
|
108
18
|
invoke! 'sidekiq:start'
|
109
19
|
end
|
110
|
-
|
111
|
-
desc 'Rolling-restart sidekiq'
|
112
|
-
task :rolling_restart do
|
113
|
-
on roles fetch(:sidekiq_roles) do |role|
|
114
|
-
switch_user(role) do
|
115
|
-
each_process_with_index(reverse: true) do |pid_file, idx|
|
116
|
-
if pid_file_exists?(pid_file) && process_exists?(pid_file)
|
117
|
-
stop_sidekiq(pid_file)
|
118
|
-
end
|
119
|
-
start_sidekiq(pid_file, idx)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
desc 'Delete any pid file not in use'
|
126
|
-
task :cleanup do
|
127
|
-
on roles fetch(:sidekiq_roles) do |role|
|
128
|
-
switch_user(role) do
|
129
|
-
each_process_with_index do |pid_file, _idx|
|
130
|
-
unless process_exists?(pid_file)
|
131
|
-
next unless pid_file_exists?(pid_file)
|
132
|
-
execute "rm #{pid_file}"
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
# TODO: Don't start if all processes are off, raise warning.
|
140
|
-
desc 'Respawn missing sidekiq processes'
|
141
|
-
task :respawn do
|
142
|
-
invoke 'sidekiq:cleanup'
|
143
|
-
on roles fetch(:sidekiq_roles) do |role|
|
144
|
-
switch_user(role) do
|
145
|
-
each_process_with_index do |pid_file, idx|
|
146
|
-
start_sidekiq(pid_file, idx) unless pid_file_exists?(pid_file)
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
task :install do
|
153
|
-
on roles fetch(:sidekiq_roles) do |role|
|
154
|
-
switch_user(role) do
|
155
|
-
case fetch(:init_system)
|
156
|
-
when :systemd
|
157
|
-
create_systemd_template
|
158
|
-
execute :systemctl, "--user", "enable", fetch(:service_unit_name)
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
task :uninstall do
|
165
|
-
on roles fetch(:sidekiq_roles) do |role|
|
166
|
-
switch_user(role) do
|
167
|
-
case fetch(:init_system)
|
168
|
-
when :systemd
|
169
|
-
execute :systemctl, "--user", "disable", fetch(:service_unit_name)
|
170
|
-
execute :rm, File.join(fetch(:service_unit_path, fetch_systemd_unit_path),fetch(:service_unit_name))
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
def each_process_with_index(reverse: false)
|
177
|
-
pid_file_list = pid_files
|
178
|
-
pid_file_list.reverse! if reverse
|
179
|
-
pid_file_list.each_with_index do |pid_file, idx|
|
180
|
-
within release_path do
|
181
|
-
yield(pid_file, idx)
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
def fetch_systemd_unit_path
|
187
|
-
home_dir = capture :pwd
|
188
|
-
File.join(home_dir, ".config", "systemd", "user")
|
189
|
-
end
|
190
|
-
|
191
|
-
def create_systemd_template
|
192
|
-
search_paths = [
|
193
|
-
File.expand_path(
|
194
|
-
File.join(*%w[.. .. .. generators capistrano sidekiq systemd templates sidekiq.service.capistrano.erb]),
|
195
|
-
__FILE__
|
196
|
-
),
|
197
|
-
]
|
198
|
-
template_path = search_paths.detect {|path| File.file?(path)}
|
199
|
-
template = File.read(template_path)
|
200
|
-
systemd_path = fetch(:service_unit_path, fetch_systemd_unit_path)
|
201
|
-
execute :mkdir, "-p", systemd_path
|
202
|
-
upload!(
|
203
|
-
StringIO.new(ERB.new(template).result(binding)),
|
204
|
-
"#{systemd_path}/#{fetch :service_unit_name}"
|
205
|
-
)
|
206
|
-
execute :systemctl, "--user", "daemon-reload"
|
207
|
-
end
|
208
|
-
|
209
|
-
def pid_files
|
210
|
-
sidekiq_roles = Array(fetch(:sidekiq_roles)).dup
|
211
|
-
sidekiq_roles.select! { |role| host.roles.include?(role) }
|
212
|
-
sidekiq_roles.flat_map do |role|
|
213
|
-
processes = fetch(:"#{ role }_processes") || fetch(:sidekiq_processes)
|
214
|
-
Array.new(processes) { |idx| fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid") }
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
def pid_file_exists?(pid_file)
|
219
|
-
test(*("[ -f #{pid_file} ]").split(' '))
|
220
|
-
end
|
221
|
-
|
222
|
-
def process_exists?(pid_file)
|
223
|
-
test(*("kill -0 $( cat #{pid_file} )").split(' '))
|
224
|
-
end
|
225
|
-
|
226
|
-
def quiet_sidekiq(pid_file)
|
227
|
-
begin
|
228
|
-
execute :sidekiqctl, 'quiet', pid_file.to_s
|
229
|
-
rescue SSHKit::Command::Failed
|
230
|
-
# If gems are not installed (first deploy) and sidekiq_default_hooks is active
|
231
|
-
warn 'sidekiqctl not found (ignore if this is the first deploy)'
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
def stop_sidekiq(pid_file)
|
236
|
-
execute :sidekiqctl, 'stop', pid_file.to_s, fetch(:sidekiq_timeout)
|
237
|
-
end
|
238
|
-
|
239
|
-
def start_sidekiq(pid_file, idx = 0)
|
240
|
-
args = []
|
241
|
-
args.push "--index #{idx}"
|
242
|
-
args.push "--pidfile #{pid_file}"
|
243
|
-
args.push "--environment #{fetch(:sidekiq_env)}"
|
244
|
-
args.push "--logfile #{fetch(:sidekiq_log)}" if fetch(:sidekiq_log)
|
245
|
-
args.push "--require #{fetch(:sidekiq_require)}" if fetch(:sidekiq_require)
|
246
|
-
args.push "--tag #{fetch(:sidekiq_tag)}" if fetch(:sidekiq_tag)
|
247
|
-
Array(fetch(:sidekiq_queue)).each do |queue|
|
248
|
-
args.push "--queue #{queue}"
|
249
|
-
end
|
250
|
-
args.push "--config #{fetch(:sidekiq_config)}" if fetch(:sidekiq_config)
|
251
|
-
args.push "--concurrency #{fetch(:sidekiq_concurrency)}" if fetch(:sidekiq_concurrency)
|
252
|
-
if (process_options = fetch(:sidekiq_options_per_process))
|
253
|
-
args.push process_options[idx]
|
254
|
-
end
|
255
|
-
# use sidekiq_options for special options
|
256
|
-
args.push fetch(:sidekiq_options) if fetch(:sidekiq_options)
|
257
|
-
|
258
|
-
if defined?(JRUBY_VERSION)
|
259
|
-
args.push '>/dev/null 2>&1 &'
|
260
|
-
warn 'Since JRuby doesn\'t support Process.daemon, Sidekiq will not be running as a daemon.'
|
261
|
-
else
|
262
|
-
args.push '--daemon'
|
263
|
-
end
|
264
|
-
|
265
|
-
execute :sidekiq, args.compact.join(' ')
|
266
|
-
end
|
267
|
-
|
268
|
-
def switch_user(role)
|
269
|
-
su_user = sidekiq_user(role)
|
270
|
-
if su_user == role.user
|
271
|
-
yield
|
272
|
-
else
|
273
|
-
as su_user do
|
274
|
-
yield
|
275
|
-
end
|
276
|
-
end
|
277
|
-
end
|
278
|
-
|
279
|
-
def sidekiq_user(role)
|
280
|
-
properties = role.properties
|
281
|
-
properties.fetch(:sidekiq_user) || # local property for sidekiq only
|
282
|
-
fetch(:sidekiq_user) ||
|
283
|
-
properties.fetch(:run_as) || # global property across multiple capistrano gems
|
284
|
-
role.user
|
285
|
-
end
|
286
20
|
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
git_plugin = self
|
2
|
+
|
3
|
+
namespace :sidekiq do
|
4
|
+
desc 'Quiet sidekiq (stop fetching new tasks from Redis)'
|
5
|
+
task :quiet do
|
6
|
+
on roles fetch(:sidekiq_roles) do |role|
|
7
|
+
git_plugin.switch_user(role) do
|
8
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
9
|
+
execute :sudo, :systemctl, "reload", fetch(:sidekiq_service_unit_name), raise_on_non_zero_exit: false
|
10
|
+
else
|
11
|
+
execute :systemctl, "--user", "reload", fetch(:sidekiq_service_unit_name), raise_on_non_zero_exit: false
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'Stop sidekiq (graceful shutdown within timeout, put unfinished tasks back to Redis)'
|
18
|
+
task :stop do
|
19
|
+
on roles fetch(:sidekiq_roles) do |role|
|
20
|
+
git_plugin.switch_user(role) do
|
21
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
22
|
+
execute :sudo, :systemctl, "stop", fetch(:sidekiq_service_unit_name)
|
23
|
+
else
|
24
|
+
execute :systemctl, "--user", "stop", fetch(:sidekiq_service_unit_name)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
desc 'Start sidekiq'
|
31
|
+
task :start do
|
32
|
+
on roles fetch(:sidekiq_roles) do |role|
|
33
|
+
git_plugin.switch_user(role) do
|
34
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
35
|
+
execute :sudo, :systemctl, 'start', fetch(:sidekiq_service_unit_name)
|
36
|
+
else
|
37
|
+
execute :systemctl, '--user', 'start', fetch(:sidekiq_service_unit_name)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
desc 'Install systemd sidekiq service'
|
44
|
+
task :install do
|
45
|
+
on roles fetch(:sidekiq_roles) do |role|
|
46
|
+
git_plugin.switch_user(role) do
|
47
|
+
git_plugin.create_systemd_template
|
48
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
49
|
+
execute :sudo, :systemctl, "enable", fetch(:sidekiq_service_unit_name)
|
50
|
+
else
|
51
|
+
execute :systemctl, "--user", "enable", fetch(:sidekiq_service_unit_name)
|
52
|
+
execute :loginctl, "enable-linger", fetch(:sidekiq_lingering_user) if fetch(:sidekiq_enable_lingering)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
desc 'UnInstall systemd sidekiq service'
|
59
|
+
task :uninstall do
|
60
|
+
on roles fetch(:sidekiq_roles) do |role|
|
61
|
+
git_plugin.switch_user(role) do
|
62
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
63
|
+
execute :sudo, :systemctl, "disable", fetch(:sidekiq_service_unit_name)
|
64
|
+
else
|
65
|
+
execute :systemctl, "--user", "disable", fetch(:sidekiq_service_unit_name)
|
66
|
+
end
|
67
|
+
execute :rm, '-f', File.join(fetch(:service_unit_path, fetch_systemd_unit_path), fetch(:sidekiq_service_unit_name))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
desc 'Generate service_locally'
|
73
|
+
task :generate_service_locally do
|
74
|
+
run_locally do
|
75
|
+
File.write('sidekiq', git_plugin.compiled_template)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def fetch_systemd_unit_path
|
80
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
81
|
+
# if the path is not standard `set :service_unit_path`
|
82
|
+
"/etc/systemd/system/"
|
83
|
+
else
|
84
|
+
home_dir = backend.capture :pwd
|
85
|
+
File.join(home_dir, ".config", "systemd", "user")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def compiled_template
|
90
|
+
search_paths = [
|
91
|
+
File.expand_path(
|
92
|
+
File.join(*%w[.. .. .. generators capistrano sidekiq systemd templates sidekiq.service.capistrano.erb]),
|
93
|
+
__FILE__
|
94
|
+
),
|
95
|
+
]
|
96
|
+
template_path = search_paths.detect { |path| File.file?(path) }
|
97
|
+
template = File.read(template_path)
|
98
|
+
ERB.new(template).result(binding)
|
99
|
+
end
|
100
|
+
|
101
|
+
def create_systemd_template
|
102
|
+
ctemplate = compiled_template
|
103
|
+
systemd_path = fetch(:service_unit_path, fetch_systemd_unit_path)
|
104
|
+
|
105
|
+
if fetch(:sidekiq_service_unit_user) == :user
|
106
|
+
backend.execute :mkdir, "-p", systemd_path
|
107
|
+
end
|
108
|
+
backend.upload!(
|
109
|
+
StringIO.new(ctemplate),
|
110
|
+
"/tmp/#{fetch :sidekiq_service_unit_name}.service"
|
111
|
+
)
|
112
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
113
|
+
backend.execute :sudo, :mv, "/tmp/#{fetch :sidekiq_service_unit_name}.service", "#{systemd_path}/#{fetch :sidekiq_service_unit_name}.service"
|
114
|
+
backend.execute :sudo, :systemctl, "daemon-reload"
|
115
|
+
else
|
116
|
+
backend.execute :mv, "/tmp/#{fetch :sidekiq_service_unit_name}.service", "#{systemd_path}/#{fetch :sidekiq_service_unit_name}.service"
|
117
|
+
backend.execute :systemctl, "--user", "daemon-reload"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def switch_user(role)
|
122
|
+
su_user = sidekiq_user
|
123
|
+
if su_user != role.user
|
124
|
+
yield
|
125
|
+
else
|
126
|
+
backend.as su_user do
|
127
|
+
yield
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def sidekiq_user
|
133
|
+
fetch(:sidekiq_user, fetch(:run_as))
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
git_plugin = self
|
2
|
+
|
3
|
+
namespace :sidekiq do
|
4
|
+
desc 'Quiet sidekiq (stop fetching new tasks from Redis)'
|
5
|
+
task :quiet do
|
6
|
+
on roles fetch(:sidekiq_roles) do |role|
|
7
|
+
git_plugin.switch_user(role) do
|
8
|
+
sudo :service, fetch(:sidekiq_service_unit_name), :reload
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
desc 'Stop sidekiq (graceful shutdown within timeout, put unfinished tasks back to Redis)'
|
14
|
+
task :stop do
|
15
|
+
on roles fetch(:sidekiq_roles) do |role|
|
16
|
+
git_plugin.switch_user(role) do
|
17
|
+
sudo :service, fetch(:sidekiq_service_unit_name), :stop
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'Start sidekiq'
|
23
|
+
task :start do
|
24
|
+
on roles fetch(:sidekiq_roles) do |role|
|
25
|
+
git_plugin.switch_user(role) do
|
26
|
+
sudo :service, fetch(:sidekiq_service_unit_name), :start
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
desc 'Install upstart sidekiq service'
|
32
|
+
task :install do
|
33
|
+
on roles fetch(:sidekiq_roles) do |role|
|
34
|
+
git_plugin.switch_user(role) do
|
35
|
+
git_plugin.create_upstart_template
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
desc 'UnInstall upstart sidekiq service'
|
41
|
+
task :uninstall do
|
42
|
+
on roles fetch(:sidekiq_roles) do |role|
|
43
|
+
git_plugin.switch_user(role) do
|
44
|
+
execute :rm, '-f', File.join(fetch(:service_unit_path, fetch_upstart_unit_path), fetch(:sidekiq_service_unit_name))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
desc 'Generate service_locally'
|
50
|
+
task :generate_service_locally do
|
51
|
+
run_locally do
|
52
|
+
File.write('sidekiq.conf', git_plugin.compiled_template)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def fetch_upstart_unit_path
|
57
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
58
|
+
# if the path is not standard `set :service_unit_path`
|
59
|
+
"/etc/init"
|
60
|
+
else
|
61
|
+
home_dir = backend.capture :pwd
|
62
|
+
File.join(home_dir, '.config', 'upstart')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def compiled_template
|
67
|
+
search_paths = [
|
68
|
+
File.expand_path(
|
69
|
+
File.join(*%w[.. .. .. generators capistrano sidekiq upstart templates sidekiq.conf.erb]),
|
70
|
+
__FILE__
|
71
|
+
),
|
72
|
+
]
|
73
|
+
template_path = search_paths.detect { |path| File.file?(path) }
|
74
|
+
template = File.read(template_path)
|
75
|
+
ERB.new(template).result(binding)
|
76
|
+
end
|
77
|
+
|
78
|
+
def create_upstart_template
|
79
|
+
ctemplate = compiled_template
|
80
|
+
upstart_path = fetch(:service_unit_path, fetch_upstart_unit_path)
|
81
|
+
|
82
|
+
if fetch(:sidekiq_service_unit_user) != :system
|
83
|
+
backend.execute :mkdir, "-p", upstart_path
|
84
|
+
end
|
85
|
+
conf_filename = "#{fetch :sidekiq_service_unit_name}.conf"
|
86
|
+
backend.upload!(
|
87
|
+
StringIO.new(ctemplate),
|
88
|
+
"/tmp/#{conf_filename}"
|
89
|
+
)
|
90
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
91
|
+
backend.execute :sudo, :mv, "/tmp/#{conf_filename}", "#{upstart_path}/#{conf_filename}"
|
92
|
+
backend.execute :sudo, :initctl, 'reload-configuration'
|
93
|
+
else
|
94
|
+
backend.execute :sudo, :mv, "/tmp/#{conf_filename}", "#{upstart_path}/#{conf_filename}"
|
95
|
+
#backend.execute :sudo, :initctl, 'reload-configuration' #TODO
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def switch_user(role)
|
100
|
+
su_user = sidekiq_user(role)
|
101
|
+
if su_user == role.user
|
102
|
+
yield
|
103
|
+
else
|
104
|
+
as su_user do
|
105
|
+
yield
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def sidekiq_user(role = nil)
|
111
|
+
if role.nil?
|
112
|
+
fetch(:sidekiq_user)
|
113
|
+
else
|
114
|
+
properties = role.properties
|
115
|
+
properties.fetch(:sidekiq_user) || # local property for sidekiq only
|
116
|
+
fetch(:sidekiq_user) ||
|
117
|
+
properties.fetch(:run_as) || # global property across multiple capistrano gems
|
118
|
+
role.user
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def num_workers
|
123
|
+
fetch(:sidekiq_upstart_num_workers, nil)
|
124
|
+
end
|
125
|
+
|
126
|
+
def sidekiq_config
|
127
|
+
if fetch(:sidekiq_config)
|
128
|
+
"--config #{fetch(:sidekiq_config)}"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def sidekiq_concurrency
|
133
|
+
if fetch(:sidekiq_concurrency)
|
134
|
+
"--concurrency #{fetch(:sidekiq_concurrency)}"
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def sidekiq_queues
|
139
|
+
Array(fetch(:sidekiq_queue)).map do |queue|
|
140
|
+
"--queue #{queue}"
|
141
|
+
end.join(' ')
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
@@ -4,11 +4,18 @@ After=syslog.target network.target
|
|
4
4
|
|
5
5
|
[Service]
|
6
6
|
Type=simple
|
7
|
-
|
8
|
-
|
9
|
-
ExecStart=<%= fetch(:bundler_path, '/usr/local/bin/bundler') %> exec sidekiq -e <%= fetch(:rails_env) %>
|
7
|
+
WorkingDirectory=<%= File.join(fetch(:deploy_to), 'current') %>
|
8
|
+
ExecStart=<%= SSHKit.config.command_map[:bundle] %> exec sidekiq -e <%= fetch(:sidekiq_env) %>
|
10
9
|
ExecReload=/bin/kill -TSTP $MAINPID
|
11
10
|
ExecStop=/bin/kill -TERM $MAINPID
|
11
|
+
<%="StandardOutput=append:#{fetch(:sidekiq_log)}" if fetch(:sidekiq_log) %>
|
12
|
+
<%="StandardError=append:#{fetch(:sidekiq_error_log)}" if fetch(:sidekiq_error_log) %>
|
13
|
+
<%="User=#{sidekiq_user}" if sidekiq_user %>
|
14
|
+
<%="EnvironmentFile=#{fetch(:sidekiq_service_unit_env_file)}" if fetch(:sidekiq_service_unit_env_file) %>
|
15
|
+
|
16
|
+
<% fetch(:sidekiq_service_unit_env_vars, []).each do |environment_variable| %>
|
17
|
+
<%="Environment=#{environment_variable}" %>
|
18
|
+
<% end %>
|
12
19
|
|
13
20
|
RestartSec=1
|
14
21
|
Restart=on-failure
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# /etc/init/sidekiq.conf - Sidekiq config | https://github.com/mperham/sidekiq/blob/master/examples/upstart/sidekiq.conf
|
2
|
+
|
3
|
+
# This example config should work with Ubuntu 12.04+. It
|
4
|
+
# allows you to manage multiple Sidekiq instances with
|
5
|
+
# Upstart, Ubuntu's native service management tool.
|
6
|
+
#
|
7
|
+
# See workers.conf for how to manage all Sidekiq instances at once.
|
8
|
+
#
|
9
|
+
# Save this config as /etc/init/sidekiq.conf then manage sidekiq with:
|
10
|
+
# sudo start <%= fetch(:sidekiq_service_unit_name) %> index=0
|
11
|
+
# sudo stop <%= fetch(:sidekiq_service_unit_name) %> index=0
|
12
|
+
# sudo status <%= fetch(:sidekiq_service_unit_name) %> index=0
|
13
|
+
#
|
14
|
+
# Hack Upstart's reload command to 'quiet' Sidekiq:
|
15
|
+
#
|
16
|
+
# sudo reload <%= fetch(:sidekiq_service_unit_name) %> index=0
|
17
|
+
#
|
18
|
+
# or use the service command:
|
19
|
+
# sudo service <%= fetch(:sidekiq_service_unit_name) %> {start,stop,restart,status}
|
20
|
+
#
|
21
|
+
|
22
|
+
description "Sidekiq for <%= "#{fetch(:application)} (#{fetch(:stage)})" %>"
|
23
|
+
|
24
|
+
# This script is not meant to start on bootup, workers.conf
|
25
|
+
# will start all sidekiq instances explicitly when it starts.
|
26
|
+
#start on runlevel [2345]
|
27
|
+
#stop on runlevel [06]
|
28
|
+
<% if sidekiq_user %>
|
29
|
+
|
30
|
+
# change to match your deployment user
|
31
|
+
setuid <%= sidekiq_user %>
|
32
|
+
setgid <%= sidekiq_user %>
|
33
|
+
env HOME=/home/<%= sidekiq_user %>
|
34
|
+
<% end %>
|
35
|
+
|
36
|
+
# Greatly reduce Ruby memory fragmentation and heap usage
|
37
|
+
# https://www.mikeperham.com/2018/04/25/taming-rails-memory-bloat/
|
38
|
+
env MALLOC_ARENA_MAX=2
|
39
|
+
|
40
|
+
respawn
|
41
|
+
respawn limit 3 30
|
42
|
+
|
43
|
+
# TERM is used when stopping sidekiq. Without declaring these as
|
44
|
+
# normal exit codes, it just respawns.
|
45
|
+
normal exit 0 TERM
|
46
|
+
|
47
|
+
# Older versions of Upstart might not support the reload command and need
|
48
|
+
# this commented out.
|
49
|
+
reload signal TSTP
|
50
|
+
|
51
|
+
# Upstart waits 5 seconds by default to kill a process. Increase timeout to
|
52
|
+
# give sidekiq process enough time to exit.
|
53
|
+
kill timeout 30
|
54
|
+
<% if num_workers %>
|
55
|
+
|
56
|
+
instance $index
|
57
|
+
<% end %>
|
58
|
+
script
|
59
|
+
# this script runs in /bin/sh by default
|
60
|
+
# respawn as bash so we can source in rbenv
|
61
|
+
exec /bin/bash <<'EOT'
|
62
|
+
# Pick your poison :) Or none if you're using a system wide installed Ruby.
|
63
|
+
# rbenv
|
64
|
+
# source /home/apps/.bash_profile
|
65
|
+
# OR
|
66
|
+
# source /home/apps/.profile
|
67
|
+
# OR system:
|
68
|
+
# source /etc/profile.d/rbenv.sh
|
69
|
+
#
|
70
|
+
# rvm
|
71
|
+
# source /home/apps/.rvm/scripts/rvm
|
72
|
+
|
73
|
+
# Logs out to /var/log/upstart/<%= fetch(:sidekiq_service_unit_name) %>.log by default
|
74
|
+
|
75
|
+
cd <%= File.join(fetch(:deploy_to), 'current') %>
|
76
|
+
exec <%= SSHKit.config.command_map[:bundle] %> exec sidekiq -e <%= fetch(:sidekiq_env) %> <%= sidekiq_config %> <%= sidekiq_concurrency %> <%= sidekiq_queues %>
|
77
|
+
EOT
|
78
|
+
end script
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# /etc/init/workers.conf - manage a set of Sidekiqs | https://github.com/mperham/sidekiq/blob/master/examples/upstart/workers.conf
|
2
|
+
|
3
|
+
# This example config should work with Ubuntu 14.10 and below It
|
4
|
+
# allows you to manage multiple Sidekiq instances with
|
5
|
+
# Upstart, Ubuntu's native service management tool.
|
6
|
+
#
|
7
|
+
# See sidekiq.conf for how to manage a single Sidekiq instance.
|
8
|
+
#
|
9
|
+
# Use "stop workers" to stop all Sidekiq instances.
|
10
|
+
# Use "start workers" to start all instances.
|
11
|
+
# Use "restart workers" to restart all instances.
|
12
|
+
# Crazy, right?
|
13
|
+
#
|
14
|
+
|
15
|
+
description "manages the set of sidekiq processes"
|
16
|
+
|
17
|
+
# This starts upon bootup and stops on shutdown
|
18
|
+
start on runlevel [2345]
|
19
|
+
stop on runlevel [06]
|
20
|
+
|
21
|
+
# Set this to the number of Sidekiq processes you want
|
22
|
+
# to run on this machine
|
23
|
+
env NUM_WORKERS=2
|
24
|
+
|
25
|
+
pre-start script
|
26
|
+
for i in `seq 1 ${NUM_WORKERS}`
|
27
|
+
do
|
28
|
+
start sidekiq index=$i
|
29
|
+
done
|
30
|
+
end script
|
31
|
+
|
32
|
+
post-stop script
|
33
|
+
for i in `seq 1 ${NUM_WORKERS}`
|
34
|
+
do
|
35
|
+
stop sidekiq index=$i
|
36
|
+
done
|
37
|
+
end script
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-sidekiq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.beta5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Abdelkader Boudih
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -25,13 +25,24 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.9.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: capistrano-bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
-
|
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
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sidekiq
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
35
46
|
- !ruby/object:Gem::Version
|
36
47
|
version: '6.0'
|
37
48
|
type: :runtime
|
@@ -39,9 +50,6 @@ dependencies:
|
|
39
50
|
version_requirements: !ruby/object:Gem::Requirement
|
40
51
|
requirements:
|
41
52
|
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '3.4'
|
44
|
-
- - "<"
|
45
53
|
- !ruby/object:Gem::Version
|
46
54
|
version: '6.0'
|
47
55
|
description: Sidekiq integration for Capistrano
|
@@ -52,6 +60,7 @@ extensions: []
|
|
52
60
|
extra_rdoc_files: []
|
53
61
|
files:
|
54
62
|
- ".gitignore"
|
63
|
+
- ".tool-versions"
|
55
64
|
- CHANGELOG.md
|
56
65
|
- CONTRIBUTORS.md
|
57
66
|
- Gemfile
|
@@ -62,12 +71,18 @@ files:
|
|
62
71
|
- lib/capistrano-sidekiq.rb
|
63
72
|
- lib/capistrano/sidekiq.rb
|
64
73
|
- lib/capistrano/sidekiq/monit.rb
|
74
|
+
- lib/capistrano/sidekiq/systemd.rb
|
75
|
+
- lib/capistrano/sidekiq/upstart.rb
|
65
76
|
- lib/capistrano/sidekiq/version.rb
|
66
77
|
- lib/capistrano/tasks/monit.rake
|
67
78
|
- lib/capistrano/tasks/sidekiq.rake
|
79
|
+
- lib/capistrano/tasks/systemd.rake
|
80
|
+
- lib/capistrano/tasks/upstart.rake
|
68
81
|
- lib/generators/capistrano/sidekiq/monit/template_generator.rb
|
69
82
|
- lib/generators/capistrano/sidekiq/monit/templates/sidekiq_monit.conf.erb
|
70
83
|
- lib/generators/capistrano/sidekiq/systemd/templates/sidekiq.service.capistrano.erb
|
84
|
+
- lib/generators/capistrano/sidekiq/upstart/templates/sidekiq.conf.erb
|
85
|
+
- lib/generators/capistrano/sidekiq/upstart/templates/workers.conf.erb
|
71
86
|
homepage: https://github.com/seuros/capistrano-sidekiq
|
72
87
|
licenses:
|
73
88
|
- LGPL-3.0
|
@@ -83,9 +98,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
83
98
|
version: 2.0.0
|
84
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
100
|
requirements:
|
86
|
-
- - "
|
101
|
+
- - ">"
|
87
102
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
103
|
+
version: 1.3.1
|
89
104
|
requirements: []
|
90
105
|
rubygems_version: 3.0.3
|
91
106
|
signing_key:
|