capistrano-sidekiq 2.0.0.beta1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []