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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 115e140182e27990ccdc85a27c67a2788c4d74724edff94e4786318a0fe5d05c
4
- data.tar.gz: d0adf318dc8d25845d00d0601b383b54be2327da37cd1e791ac767492b2b55d9
3
+ metadata.gz: 1c3bd1a14a2effd1ef907aaab6d7cb391d25d5125ec22d7ff338f0e98e475e28
4
+ data.tar.gz: f8a97dcfe1ecdbfecf0ad5ffbb90df8cf5653a4b67f3e6e745cfc91a295c546e
5
5
  SHA512:
6
- metadata.gz: 56b1fcd34fa970a62c517016551fa7e68193c35f9c3187e8abbfbffbd7adf3ad2e2766b98ff5b5dbff67d982de8adb687aec4657f70d1a7583f3f89feff2e5fd
7
- data.tar.gz: d6e43d4fce3e9812b62449bc029820b856742ae8f8aed458bbf461c88984725b02987161964ec432935a5d1f9a58c15bc67ded351f5aea242890f5b34597ce35
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'
@@ -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'
@@ -3,6 +3,8 @@ module Capistrano
3
3
  def set_defaults
4
4
  set_if_empty :sidekiq_service_unit_name, 'sidekiq'
5
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
6
8
  end
7
9
 
8
10
  def define_tasks
@@ -1,3 +1,3 @@
1
1
  module Capistrano
2
- SidekiqVERSION = '2.0.0.beta1'
2
+ SidekiqVERSION = '2.0.0'
3
3
  end
@@ -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 :sudo, :mv, "/tmp/#{fetch :sidekiq_service_unit_name}.service", "#{systemd_path}/#{fetch :sidekiq_service_unit_name}.service"
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
- properties = role.properties
42
- properties.fetch(:sidekiq_user) || # local property for sidekiq only
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[:bundler] %> exec sidekiq -e <%= fetch(:sidekiq_env) %> -l <%= fetch(:sidekiq_log) %>
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.beta1
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-05-13 00:00:00.000000000 Z
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: 1.3.1
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: []