capistrano-sidekiq 1.0.3 → 2.0.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 +4 -4
- data/.tool-versions +1 -0
- data/README.md +19 -86
- data/capistrano-sidekiq.gemspec +2 -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/sidekiq.rb +30 -1
- data/lib/capistrano/tasks/sidekiq.rake +2 -268
- data/lib/capistrano/tasks/systemd.rake +135 -0
- data/lib/capistrano/tasks/upstart.rake +146 -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 +26 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c3bd1a14a2effd1ef907aaab6d7cb391d25d5125ec22d7ff338f0e98e475e28
|
4
|
+
data.tar.gz: f8a97dcfe1ecdbfecf0ad5ffbb90df8cf5653a4b67f3e6e745cfc91a295c546e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 776cc57678b6b04bb80f94470c90cf7690b44a0cea4ead9abb543c99726104ad2218c87308ba273f7304defd0fe6e61a14bbb1c7b1edb003a8012abb58f7f135
|
7
|
+
data.tar.gz: 0fb423476f90dbece2f3107196392e168b9bfd17e47eef25a94a47fb1f34dab4bb839317aa2f30c1b8acc2d7c23a76e35f7477567c1417d52f111900fd9759ca
|
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
@@ -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
|
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,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,146 @@
|
|
1
|
+
git_plugin = self
|
2
|
+
|
3
|
+
SUPPRESS_FAILURE = %w[|| echo NO_RUNNING_INSTANCE].freeze
|
4
|
+
|
5
|
+
namespace :sidekiq do
|
6
|
+
desc 'Quiet sidekiq (stop fetching new tasks from Redis)'
|
7
|
+
task :quiet do
|
8
|
+
on roles fetch(:sidekiq_roles) do |role|
|
9
|
+
git_plugin.switch_user(role) do
|
10
|
+
sudo :service, fetch(:sidekiq_service_unit_name), :reload, *SUPPRESS_FAILURE
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'Stop sidekiq (graceful shutdown within timeout, put unfinished tasks back to Redis)'
|
16
|
+
task :stop do
|
17
|
+
on roles fetch(:sidekiq_roles) do |role|
|
18
|
+
git_plugin.switch_user(role) do
|
19
|
+
sudo :service, fetch(:sidekiq_service_unit_name), :stop, *SUPPRESS_FAILURE
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Start sidekiq'
|
25
|
+
task :start do
|
26
|
+
on roles fetch(:sidekiq_roles) do |role|
|
27
|
+
git_plugin.switch_user(role) do
|
28
|
+
sudo :service, fetch(:sidekiq_service_unit_name), :start
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
desc 'Install upstart sidekiq service'
|
34
|
+
task :install do
|
35
|
+
on roles fetch(:sidekiq_roles) do |role|
|
36
|
+
git_plugin.switch_user(role) do
|
37
|
+
git_plugin.create_upstart_template
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
desc 'UnInstall upstart sidekiq service'
|
43
|
+
task :uninstall do
|
44
|
+
on roles fetch(:sidekiq_roles) do |role|
|
45
|
+
git_plugin.switch_user(role) do
|
46
|
+
execute :rm, '-f', File.join(fetch(:service_unit_path, fetch_upstart_unit_path), fetch(:sidekiq_service_unit_name))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
desc 'Generate service_locally'
|
52
|
+
task :generate_service_locally do
|
53
|
+
run_locally do
|
54
|
+
File.write('sidekiq.conf', git_plugin.compiled_template)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def fetch_upstart_unit_path
|
59
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
60
|
+
# if the path is not standard `set :service_unit_path`
|
61
|
+
"/etc/init"
|
62
|
+
else
|
63
|
+
home_dir = backend.capture :pwd
|
64
|
+
File.join(home_dir, '.config', 'upstart')
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def compiled_template
|
69
|
+
search_paths = [
|
70
|
+
File.expand_path(
|
71
|
+
File.join(*%w[.. .. .. generators capistrano sidekiq upstart templates sidekiq.conf.erb]),
|
72
|
+
__FILE__
|
73
|
+
),
|
74
|
+
]
|
75
|
+
template_path = search_paths.detect { |path| File.file?(path) }
|
76
|
+
template = File.read(template_path)
|
77
|
+
ERB.new(template).result(binding)
|
78
|
+
end
|
79
|
+
|
80
|
+
def create_upstart_template
|
81
|
+
ctemplate = compiled_template
|
82
|
+
upstart_path = fetch(:service_unit_path, fetch_upstart_unit_path)
|
83
|
+
|
84
|
+
if fetch(:sidekiq_service_unit_user) != :system
|
85
|
+
backend.execute :mkdir, "-p", upstart_path
|
86
|
+
end
|
87
|
+
conf_filename = "#{fetch :sidekiq_service_unit_name}.conf"
|
88
|
+
backend.upload!(
|
89
|
+
StringIO.new(ctemplate),
|
90
|
+
"/tmp/#{conf_filename}"
|
91
|
+
)
|
92
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
93
|
+
backend.execute :sudo, :mv, "/tmp/#{conf_filename}", "#{upstart_path}/#{conf_filename}"
|
94
|
+
backend.execute :sudo, :initctl, 'reload-configuration'
|
95
|
+
else
|
96
|
+
backend.execute :sudo, :mv, "/tmp/#{conf_filename}", "#{upstart_path}/#{conf_filename}"
|
97
|
+
#backend.execute :sudo, :initctl, 'reload-configuration' #TODO
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def switch_user(role)
|
102
|
+
su_user = sidekiq_user(role)
|
103
|
+
if su_user == role.user
|
104
|
+
yield
|
105
|
+
else
|
106
|
+
as su_user do
|
107
|
+
yield
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def sidekiq_user(role = nil)
|
113
|
+
if role.nil?
|
114
|
+
fetch(:sidekiq_user)
|
115
|
+
else
|
116
|
+
properties = role.properties
|
117
|
+
properties.fetch(:sidekiq_user) || # local property for sidekiq only
|
118
|
+
fetch(:sidekiq_user) ||
|
119
|
+
properties.fetch(:run_as) || # global property across multiple capistrano gems
|
120
|
+
role.user
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def num_workers
|
125
|
+
fetch(:sidekiq_upstart_num_workers, nil)
|
126
|
+
end
|
127
|
+
|
128
|
+
def sidekiq_config
|
129
|
+
if fetch(:sidekiq_config)
|
130
|
+
"--config #{fetch(:sidekiq_config)}"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def sidekiq_concurrency
|
135
|
+
if fetch(:sidekiq_concurrency)
|
136
|
+
"--concurrency #{fetch(:sidekiq_concurrency)}"
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def sidekiq_queues
|
141
|
+
Array(fetch(:sidekiq_queue)).map do |queue|
|
142
|
+
"--queue #{queue}"
|
143
|
+
end.join(' ')
|
144
|
+
end
|
145
|
+
|
146
|
+
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
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Abdelkader Boudih
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-12-19 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,17 +71,23 @@ 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
|
74
89
|
metadata: {}
|
75
|
-
post_install_message:
|
90
|
+
post_install_message:
|
76
91
|
rdoc_options: []
|
77
92
|
require_paths:
|
78
93
|
- lib
|
@@ -88,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
103
|
version: '0'
|
89
104
|
requirements: []
|
90
105
|
rubygems_version: 3.0.3
|
91
|
-
signing_key:
|
106
|
+
signing_key:
|
92
107
|
specification_version: 4
|
93
108
|
summary: Sidekiq integration for Capistrano
|
94
109
|
test_files: []
|