capistrano-sidekiq 2.0.0.beta1 → 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/README.md +6 -0
- data/lib/capistrano/sidekiq.rb +1 -0
- data/lib/capistrano/sidekiq/systemd.rb +2 -0
- data/lib/capistrano/sidekiq/version.rb +1 -1
- data/lib/capistrano/tasks/systemd.rake +3 -2
- data/lib/capistrano/tasks/upstart.rake +104 -5
- data/lib/generators/capistrano/sidekiq/systemd/templates/sidekiq.service.capistrano.erb +7 -1
- 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 +9 -7
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/README.md
CHANGED
@@ -37,6 +37,12 @@ Configurable options, shown here with defaults:
|
|
37
37
|
:sidekiq_env => fetch(:rack_env, fetch(:rails_env, fetch(:stage)))
|
38
38
|
:sidekiq_log => File.join(shared_path, 'log', 'sidekiq.log')
|
39
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
|
+
|
40
46
|
# sidekiq monit
|
41
47
|
:sidekiq_monit_templates_path => 'config/deploy/templates'
|
42
48
|
:sidekiq_monit_conf_dir => '/etc/monit/conf.d'
|
data/lib/capistrano/sidekiq.rb
CHANGED
@@ -13,6 +13,7 @@ module Capistrano
|
|
13
13
|
set_if_empty :sidekiq_env, -> { fetch(:rack_env, fetch(:rails_env, fetch(:rake_env, fetch(:stage)))) }
|
14
14
|
set_if_empty :sidekiq_roles, fetch(:sidekiq_role, :app)
|
15
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') }
|
16
17
|
# Rbenv, Chruby, and RVM integration
|
17
18
|
append :rbenv_map_bins, 'sidekiq', 'sidekiqctl'
|
18
19
|
append :rvm_map_bins, 'sidekiq', 'sidekiqctl'
|
@@ -49,6 +49,7 @@ namespace :sidekiq do
|
|
49
49
|
execute :sudo, :systemctl, "enable", fetch(:sidekiq_service_unit_name)
|
50
50
|
else
|
51
51
|
execute :systemctl, "--user", "enable", fetch(:sidekiq_service_unit_name)
|
52
|
+
execute :loginctl, "enable-linger", fetch(:sidekiq_lingering_user) if fetch(:sidekiq_enable_lingering)
|
52
53
|
end
|
53
54
|
end
|
54
55
|
end
|
@@ -112,7 +113,7 @@ namespace :sidekiq do
|
|
112
113
|
backend.execute :sudo, :mv, "/tmp/#{fetch :sidekiq_service_unit_name}.service", "#{systemd_path}/#{fetch :sidekiq_service_unit_name}.service"
|
113
114
|
backend.execute :sudo, :systemctl, "daemon-reload"
|
114
115
|
else
|
115
|
-
backend.execute :
|
116
|
+
backend.execute :mv, "/tmp/#{fetch :sidekiq_service_unit_name}.service", "#{systemd_path}/#{fetch :sidekiq_service_unit_name}.service"
|
116
117
|
backend.execute :systemctl, "--user", "daemon-reload"
|
117
118
|
end
|
118
119
|
end
|
@@ -122,7 +123,7 @@ namespace :sidekiq do
|
|
122
123
|
if su_user != role.user
|
123
124
|
yield
|
124
125
|
else
|
125
|
-
as su_user do
|
126
|
+
backend.as su_user do
|
126
127
|
yield
|
127
128
|
end
|
128
129
|
end
|
@@ -1,9 +1,13 @@
|
|
1
|
+
git_plugin = self
|
2
|
+
|
3
|
+
SUPPRESS_FAILURE = %w[|| echo NO_RUNNING_INSTANCE].freeze
|
4
|
+
|
1
5
|
namespace :sidekiq do
|
2
6
|
desc 'Quiet sidekiq (stop fetching new tasks from Redis)'
|
3
7
|
task :quiet do
|
4
8
|
on roles fetch(:sidekiq_roles) do |role|
|
5
9
|
git_plugin.switch_user(role) do
|
6
|
-
sudo :service, fetch(:sidekiq_service_unit_name), :reload
|
10
|
+
sudo :service, fetch(:sidekiq_service_unit_name), :reload, *SUPPRESS_FAILURE
|
7
11
|
end
|
8
12
|
end
|
9
13
|
end
|
@@ -12,7 +16,7 @@ namespace :sidekiq do
|
|
12
16
|
task :stop do
|
13
17
|
on roles fetch(:sidekiq_roles) do |role|
|
14
18
|
git_plugin.switch_user(role) do
|
15
|
-
sudo :service, fetch(:sidekiq_service_unit_name), :stop
|
19
|
+
sudo :service, fetch(:sidekiq_service_unit_name), :stop, *SUPPRESS_FAILURE
|
16
20
|
end
|
17
21
|
end
|
18
22
|
end
|
@@ -26,6 +30,74 @@ namespace :sidekiq do
|
|
26
30
|
end
|
27
31
|
end
|
28
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
|
+
|
29
101
|
def switch_user(role)
|
30
102
|
su_user = sidekiq_user(role)
|
31
103
|
if su_user == role.user
|
@@ -37,11 +109,38 @@ namespace :sidekiq do
|
|
37
109
|
end
|
38
110
|
end
|
39
111
|
|
40
|
-
def sidekiq_user(role)
|
41
|
-
|
42
|
-
|
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
|
43
118
|
fetch(:sidekiq_user) ||
|
44
119
|
properties.fetch(:run_as) || # global property across multiple capistrano gems
|
45
120
|
role.user
|
121
|
+
end
|
46
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
|
+
|
47
146
|
end
|
@@ -5,12 +5,18 @@ After=syslog.target network.target
|
|
5
5
|
[Service]
|
6
6
|
Type=simple
|
7
7
|
WorkingDirectory=<%= File.join(fetch(:deploy_to), 'current') %>
|
8
|
-
ExecStart=<%= SSHKit.config.command_map[:
|
8
|
+
ExecStart=<%= SSHKit.config.command_map[:bundle] %> exec sidekiq -e <%= fetch(:sidekiq_env) %>
|
9
9
|
ExecReload=/bin/kill -TSTP $MAINPID
|
10
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) %>
|
11
13
|
<%="User=#{sidekiq_user}" if sidekiq_user %>
|
12
14
|
<%="EnvironmentFile=#{fetch(:sidekiq_service_unit_env_file)}" if fetch(:sidekiq_service_unit_env_file) %>
|
13
15
|
|
16
|
+
<% fetch(:sidekiq_service_unit_env_vars, []).each do |environment_variable| %>
|
17
|
+
<%="Environment=#{environment_variable}" %>
|
18
|
+
<% end %>
|
19
|
+
|
14
20
|
RestartSec=1
|
15
21
|
Restart=on-failure
|
16
22
|
|
@@ -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: 2.0.0
|
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: 2020-
|
11
|
+
date: 2020-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -81,11 +81,13 @@ files:
|
|
81
81
|
- lib/generators/capistrano/sidekiq/monit/template_generator.rb
|
82
82
|
- lib/generators/capistrano/sidekiq/monit/templates/sidekiq_monit.conf.erb
|
83
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
|
84
86
|
homepage: https://github.com/seuros/capistrano-sidekiq
|
85
87
|
licenses:
|
86
88
|
- LGPL-3.0
|
87
89
|
metadata: {}
|
88
|
-
post_install_message:
|
90
|
+
post_install_message:
|
89
91
|
rdoc_options: []
|
90
92
|
require_paths:
|
91
93
|
- lib
|
@@ -96,12 +98,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
96
98
|
version: 2.0.0
|
97
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
100
|
requirements:
|
99
|
-
- - "
|
101
|
+
- - ">="
|
100
102
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
103
|
+
version: '0'
|
102
104
|
requirements: []
|
103
105
|
rubygems_version: 3.0.3
|
104
|
-
signing_key:
|
106
|
+
signing_key:
|
105
107
|
specification_version: 4
|
106
108
|
summary: Sidekiq integration for Capistrano
|
107
109
|
test_files: []
|