capistrano-sidekiq 2.0.0.beta5 → 2.2.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.
@@ -1,11 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  git_plugin = self
2
4
 
5
+ SUPPRESS_FAILURE = %w[|| echo NO_RUNNING_INSTANCE].freeze
6
+
3
7
  namespace :sidekiq do
4
8
  desc 'Quiet sidekiq (stop fetching new tasks from Redis)'
5
9
  task :quiet do
6
10
  on roles fetch(:sidekiq_roles) do |role|
7
11
  git_plugin.switch_user(role) do
8
- sudo :service, fetch(:sidekiq_service_unit_name), :reload
12
+ sudo :service, fetch(:sidekiq_service_unit_name), :reload, *SUPPRESS_FAILURE
9
13
  end
10
14
  end
11
15
  end
@@ -14,7 +18,7 @@ namespace :sidekiq do
14
18
  task :stop do
15
19
  on roles fetch(:sidekiq_roles) do |role|
16
20
  git_plugin.switch_user(role) do
17
- sudo :service, fetch(:sidekiq_service_unit_name), :stop
21
+ sudo :service, fetch(:sidekiq_service_unit_name), :stop, *SUPPRESS_FAILURE
18
22
  end
19
23
  end
20
24
  end
@@ -41,7 +45,8 @@ namespace :sidekiq do
41
45
  task :uninstall do
42
46
  on roles fetch(:sidekiq_roles) do |role|
43
47
  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))
48
+ execute :rm, '-f',
49
+ File.join(fetch(:service_unit_path, fetch_upstart_unit_path), fetch(:sidekiq_service_unit_name))
45
50
  end
46
51
  end
47
52
  end
@@ -56,7 +61,7 @@ namespace :sidekiq do
56
61
  def fetch_upstart_unit_path
57
62
  if fetch(:sidekiq_service_unit_user) == :system
58
63
  # if the path is not standard `set :service_unit_path`
59
- "/etc/init"
64
+ '/etc/init'
60
65
  else
61
66
  home_dir = backend.capture :pwd
62
67
  File.join(home_dir, '.config', 'upstart')
@@ -68,7 +73,7 @@ namespace :sidekiq do
68
73
  File.expand_path(
69
74
  File.join(*%w[.. .. .. generators capistrano sidekiq upstart templates sidekiq.conf.erb]),
70
75
  __FILE__
71
- ),
76
+ )
72
77
  ]
73
78
  template_path = search_paths.detect { |path| File.file?(path) }
74
79
  template = File.read(template_path)
@@ -79,66 +84,21 @@ namespace :sidekiq do
79
84
  ctemplate = compiled_template
80
85
  upstart_path = fetch(:service_unit_path, fetch_upstart_unit_path)
81
86
 
82
- if fetch(:sidekiq_service_unit_user) != :system
83
- backend.execute :mkdir, "-p", upstart_path
84
- end
87
+ backend.execute :mkdir, '-p', upstart_path if fetch(:sidekiq_service_unit_user) != :system
85
88
  conf_filename = "#{fetch :sidekiq_service_unit_name}.conf"
86
89
  backend.upload!(
87
90
  StringIO.new(ctemplate),
88
91
  "/tmp/#{conf_filename}"
89
92
  )
93
+ backend.execute :sudo, :mv, "/tmp/#{conf_filename}", "#{upstart_path}/#{conf_filename}"
90
94
  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'
95
+ backend.execute :sudo, :initctl, 'reload-configuration'
93
96
  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
97
+ # backend.execute :sudo, :initctl, 'reload-configuration' #TODO
119
98
  end
120
99
  end
121
100
 
122
101
  def num_workers
123
102
  fetch(:sidekiq_upstart_num_workers, nil)
124
103
  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
104
  end
@@ -1,10 +1,6 @@
1
1
  # Monit configuration for Sidekiq : <%= fetch(:application) %>
2
- <% pid_files.each_with_index do |pid_file, idx| %>
3
- check process <%= sidekiq_service_name(idx) %>
4
- with pidfile "<%= pid_file %>"
5
- start program = "/bin/su - <%= sidekiq_user(@role) %> -c 'cd <%= current_path %> && <%= SSHKit.config.command_map[:sidekiq] %> <%= sidekiq_config %> --index <%= idx %> --pidfile <%= pid_file %> --environment <%= fetch(:sidekiq_env) %> <%= sidekiq_concurrency %> <%= sidekiq_logfile %> <%= sidekiq_require %> <%= sidekiq_queues %> <%= sidekiq_options_per_process[idx] %> -d'" with timeout 30 seconds
6
-
7
- stop program = "/bin/su - <%= sidekiq_user(@role) %> -c 'cd <%= current_path %> && <%= SSHKit.config.command_map[:sidekiqctl] %> stop <%= pid_file %>'" with timeout <%= fetch(:sidekiq_timeout).to_i + 10 %> seconds
2
+ check process <%= sidekiq_service_name %>
3
+ matching 'sidekiq .* <%= fetch(:full_app_name) %>'
4
+ start program = "/bin/su - <%= sidekiq_user(role) %> -c 'cd <%= current_path %> && <%= SSHKit.config.command_map[:bundle] %> exec sidekiq -e <%= fetch(:sidekiq_env) %> <%= sidekiq_config %> <%= sidekiq_concurrency %> <%= sidekiq_require %> <%= sidekiq_queues %> <%= sidekiq_logfile ? ">> #{sidekiq_logfile} 2>&1" : nil %> &'" with timeout 30 seconds
5
+ stop program = "/bin/su - <%= sidekiq_user(role) %> -c 'ps -ax | grep "<%= "sidekiq .* #{fetch(:full_app_name)}" %>" | grep -v grep | awk "{print \$1}" | xargs --no-run-if-empty kill'" with timeout <%= fetch(:sidekiq_timeout).to_i + 10 %> seconds
8
6
  group <%= fetch(:sidekiq_monit_group) || fetch(:application) %>-sidekiq
9
-
10
- <% end %>
@@ -1,25 +1,69 @@
1
+ # Source: https://github.com/mperham/sidekiq/blob/master/examples/systemd/sidekiq.service
2
+ #
3
+ # This file tells systemd how to run Sidekiq as a 24/7 long-running daemon.
4
+ #
5
+ # Customize this file based on your bundler location, app directory, etc.
6
+ # Customize and copy this into /usr/lib/systemd/system (CentOS) or /lib/systemd/system (Ubuntu).
7
+ # Then run:
8
+ # - systemctl enable sidekiq
9
+ # - systemctl {start,stop,restart} sidekiq
10
+ #
11
+ # This file corresponds to a single Sidekiq process. Add multiple copies
12
+ # to run multiple processes (sidekiq-1, sidekiq-2, etc).
13
+ #
14
+ # Use `journalctl -u sidekiq -rn 100` to view the last 100 lines of log output.
15
+ #
1
16
  [Unit]
2
17
  Description=sidekiq for <%= "#{fetch(:application)} (#{fetch(:stage)})" %>
18
+ # start us only once the network and logging subsystems are available,
19
+ # consider adding redis-server.service if Redis is local and systemd-managed.
3
20
  After=syslog.target network.target
4
21
 
22
+ # See these pages for lots of options:
23
+ #
24
+ # https://www.freedesktop.org/software/systemd/man/systemd.service.html
25
+ # https://www.freedesktop.org/software/systemd/man/systemd.exec.html
26
+ #
27
+ # THOSE PAGES ARE CRITICAL FOR ANY LINUX DEVOPS WORK; read them multiple
28
+ # times! systemd is a critical tool for all developers to know and understand.
29
+ #
5
30
  [Service]
6
- Type=simple
31
+ #
32
+ # !!!! !!!! !!!!
33
+ #
34
+ # As of v6.0.6, Sidekiq automatically supports systemd's `Type=notify` and watchdog service
35
+ # monitoring. If you are using an earlier version of Sidekiq, change this to `Type=simple`
36
+ # and remove the `WatchdogSec` line.
37
+ #
38
+ # !!!! !!!! !!!!
39
+ #
40
+ Type=notify
41
+ # If your Sidekiq process locks up, systemd's watchdog will restart it within seconds.
42
+ WatchdogSec=10
43
+
7
44
  WorkingDirectory=<%= File.join(fetch(:deploy_to), 'current') %>
8
- ExecStart=<%= SSHKit.config.command_map[:bundle] %> exec sidekiq -e <%= fetch(:sidekiq_env) %>
9
- ExecReload=/bin/kill -TSTP $MAINPID
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) %>
45
+ ExecStart=<%= expanded_bundle_path %> exec sidekiq -e <%= fetch(:sidekiq_env) %> <%= sidekiq_config %> <%= sidekiq_concurrency %> <%= sidekiq_queues %>
46
+
47
+ # Use `systemctl kill -s TSTP sidekiq` to quiet the Sidekiq process
48
+
13
49
  <%="User=#{sidekiq_user}" if sidekiq_user %>
14
- <%="EnvironmentFile=#{fetch(:sidekiq_service_unit_env_file)}" if fetch(:sidekiq_service_unit_env_file) %>
50
+ UMask=0002
51
+
52
+ <%="EnvironmentFile=#{File.join(fetch(:deploy_to), 'current')}/#{fetch(:sidekiq_service_unit_env_file)}" if fetch(:sidekiq_service_unit_env_file) %>
15
53
 
16
54
  <% fetch(:sidekiq_service_unit_env_vars, []).each do |environment_variable| %>
17
55
  <%="Environment=#{environment_variable}" %>
18
56
  <% end %>
19
57
 
58
+ # if we crash, restart
20
59
  RestartSec=1
21
60
  Restart=on-failure
22
61
 
62
+ # output goes to /var/log/syslog (Ubuntu) or /var/log/messages (CentOS)
63
+ <%="StandardOutput=append:#{fetch(:sidekiq_log)}" if fetch(:sidekiq_log) %>
64
+ <%="StandardError=append:#{fetch(:sidekiq_error_log)}" if fetch(:sidekiq_error_log) %>
65
+
66
+ # This will default to "bundler" if we don't specify it
23
67
  SyslogIdentifier=sidekiq
24
68
 
25
69
  [Install]
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.beta5
4
+ version: 2.2.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-06-25 00:00:00.000000000 Z
11
+ date: 2022-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -70,6 +70,7 @@ files:
70
70
  - capistrano-sidekiq.gemspec
71
71
  - lib/capistrano-sidekiq.rb
72
72
  - lib/capistrano/sidekiq.rb
73
+ - lib/capistrano/sidekiq/helpers.rb
73
74
  - lib/capistrano/sidekiq/monit.rb
74
75
  - lib/capistrano/sidekiq/systemd.rb
75
76
  - lib/capistrano/sidekiq/upstart.rb
@@ -87,7 +88,7 @@ homepage: https://github.com/seuros/capistrano-sidekiq
87
88
  licenses:
88
89
  - LGPL-3.0
89
90
  metadata: {}
90
- post_install_message:
91
+ post_install_message:
91
92
  rdoc_options: []
92
93
  require_paths:
93
94
  - lib
@@ -98,12 +99,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
99
  version: 2.0.0
99
100
  required_rubygems_version: !ruby/object:Gem::Requirement
100
101
  requirements:
101
- - - ">"
102
+ - - ">="
102
103
  - !ruby/object:Gem::Version
103
- version: 1.3.1
104
+ version: '0'
104
105
  requirements: []
105
- rubygems_version: 3.0.3
106
- signing_key:
106
+ rubygems_version: 3.2.22
107
+ signing_key:
107
108
  specification_version: 4
108
109
  summary: Sidekiq integration for Capistrano
109
110
  test_files: []