mina-sidekiq 1.0.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Changelog.md +5 -0
- data/README.md +81 -10
- data/lib/mina_sidekiq/tasks.rb +130 -29
- data/lib/mina_sidekiq/version.rb +1 -1
- metadata +6 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b6b58dc398da8db743c4f5f063cf60cabc54e546463c8ca9504afed5855ee4a5
|
4
|
+
data.tar.gz: 46cd45d6d4ef1ab10a93892baf0fab90d7899b4520e2afd1a068e0fb90ab7dae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8902d7d2b9f28020b5049dcaf661fbf7ab07b644b9e4da7a5b737a628acbd38de5480386bd281430a9fbc7d3c7c28f7e4d63a48cd10030805b89af9bd18feee
|
7
|
+
data.tar.gz: dbff1c1aea66bb4a111e29fc3c9f5c368d22819b0e7e9329d558f99cefa9ce4bc199bc2bd8035ccd1b7b23b68f7a9fc7df5e1c9a3e2b5fd69b0f8aedf43a9f79
|
data/Changelog.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
1.1.0 2020-07-18
|
5
|
+
----------------
|
6
|
+
* Add sidekiq 6 support, including support for unprivileged deployments
|
7
|
+
* Allow multiple sidekiq process with different configs
|
8
|
+
|
4
9
|
1.0.3 2017-11-05
|
5
10
|
----------------
|
6
11
|
* replace deprecated dependency on environment task with remote_environment
|
data/README.md
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
mina-sidekiq
|
2
2
|
============
|
3
3
|
|
4
|
-
[![Build Status](https://travis-ci.org/Mic92/mina-sidekiq.png?branch=master)](https://travis-ci.org/Mic92/mina-sidekiq)
|
5
|
-
|
6
4
|
mina-sidekiq is a gem that adds tasks to aid in the deployment of [Sidekiq](http://mperham.github.com/sidekiq/)
|
7
5
|
using [Mina](http://nadarei.co/mina).
|
8
6
|
|
9
7
|
Starting with 1.0.0 this gem requires Mina 1.0! (thanks [@devvmh](https://github.com/devvmh))
|
10
8
|
|
9
|
+
Support sidekiq > 6.0, reference project capistrano-sidekiq, github: https://github.com/seuros/capistrano-sidekiq
|
10
|
+
|
11
11
|
# Getting Start
|
12
12
|
|
13
13
|
## Installation
|
@@ -43,6 +43,71 @@ task :deploy do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
```
|
46
|
+
## Support sidekiq > 6.0
|
47
|
+
|
48
|
+
Set init system to systemd in the mina deploy config:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
set :init_system, :systemd
|
52
|
+
```
|
53
|
+
|
54
|
+
Enable lingering for systemd user account
|
55
|
+
|
56
|
+
```
|
57
|
+
loginctl enable-linger USERACCOUNT
|
58
|
+
```
|
59
|
+
|
60
|
+
Install systemd.service template file and enable the service with:
|
61
|
+
|
62
|
+
```
|
63
|
+
bundle exec mina sidekiq:install
|
64
|
+
```
|
65
|
+
|
66
|
+
Default name for the service file is sidekiq-env.service. This can be changed as needed, for example:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
set :service_unit_name, "sidekiq-#{fetch(:rails_env)}.service"
|
70
|
+
```
|
71
|
+
|
72
|
+
Default systemctl command is ```systemctl --user```, this can be changed, for example:
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
set :systemctl_command, 'systemctl --user'
|
76
|
+
```
|
77
|
+
For non privileged user (non sudo) usage set up path for systemctl unit file:
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
set :service_unit_path, '/home/www/.config/systemd/user'
|
81
|
+
```
|
82
|
+
|
83
|
+
where ```www``` is the username. For details see systemctl [doc page](https://www.freedesktop.org/software/systemd/man/systemd.unit.html)
|
84
|
+
|
85
|
+
To use systemctl integration with rbenv bundler path must be setted:
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
set :bundler_path, '/home/www/.rbenv/shims/bundler'
|
89
|
+
```
|
90
|
+
|
91
|
+
To get bundler path use:
|
92
|
+
|
93
|
+
```bash
|
94
|
+
which bundler
|
95
|
+
```
|
96
|
+
|
97
|
+
|
98
|
+
## Integration with upstart
|
99
|
+
|
100
|
+
Set init system to upstart in the cap deploy config:
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
set :init_system, :upstart
|
104
|
+
```
|
105
|
+
|
106
|
+
Set upstart service name:
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
set :upstart_service_name, 'sidekiq'
|
110
|
+
```
|
46
111
|
|
47
112
|
|
48
113
|
## Available Tasks
|
@@ -53,16 +118,22 @@ end
|
|
53
118
|
* sidekiq:quiet
|
54
119
|
* sidekiq:log
|
55
120
|
|
121
|
+
sidekiq > 6.0
|
122
|
+
* sidekiq:install
|
123
|
+
* sidekiq:uninstall
|
124
|
+
|
56
125
|
## Available Options
|
57
126
|
|
58
|
-
| Option | Description
|
59
|
-
| ------------------- |
|
60
|
-
| *sidekiq* | Sets the path to sidekiq.
|
61
|
-
| *sidekiqctl* | Sets the path to sidekiqctl.
|
62
|
-
| *sidekiq\_timeout* | Sets a upper limit of time a worker is allowed to finish, before it is killed.
|
63
|
-
| *sidekiq\_log* | Sets the path to the log file of sidekiq.
|
64
|
-
| *sidekiq\_pid* | Sets the path to the pid file of a sidekiq worker.
|
65
|
-
| *sidekiq_processes* | Sets the number of sidekiq processes launched.
|
127
|
+
| Option | Description |
|
128
|
+
| ------------------- | ------------------------------------------------------------------------------------------------- |
|
129
|
+
| *sidekiq* | Sets the path to sidekiq. |
|
130
|
+
| *sidekiqctl* | Sets the path to sidekiqctl. |
|
131
|
+
| *sidekiq\_timeout* | Sets a upper limit of time a worker is allowed to finish, before it is killed. |
|
132
|
+
| *sidekiq\_log* | Sets the path to the log file of sidekiq. |
|
133
|
+
| *sidekiq\_pid* | Sets the path to the pid file of a sidekiq worker. |
|
134
|
+
| *sidekiq_processes* | Sets the number of sidekiq processes launched. |
|
135
|
+
| *sidekiq_config* | Sets the config file path. |
|
136
|
+
| *sidekiq_configs* | Sets the config file paths when using more than one sidekiq process with different configuration. |
|
66
137
|
|
67
138
|
## Testing
|
68
139
|
|
data/lib/mina_sidekiq/tasks.rb
CHANGED
@@ -33,16 +33,26 @@ set :sidekiq, -> { "#{fetch(:bundle_bin)} exec sidekiq" }
|
|
33
33
|
|
34
34
|
# ### sidekiqctl
|
35
35
|
# Sets the path to sidekiqctl.
|
36
|
-
set :sidekiqctl, -> { "#{fetch(:
|
36
|
+
set :sidekiqctl, -> { "#{fetch(:bundle_bin)} exec sidekiqctl" }
|
37
37
|
|
38
38
|
# ### sidekiq_timeout
|
39
39
|
# Sets a upper limit of time a process is allowed to finish, before it is killed by sidekiqctl.
|
40
40
|
set :sidekiq_timeout, 11
|
41
41
|
|
42
42
|
# ### sidekiq_config
|
43
|
-
# Sets the path to the configuration file of sidekiq
|
43
|
+
# Sets the path to the configuration file of sidekiq.
|
44
44
|
set :sidekiq_config, -> { "#{fetch(:current_path)}/config/sidekiq.yml" }
|
45
45
|
|
46
|
+
# ### sidekiq_configs
|
47
|
+
# A list of configuration file paths. Each file path will be assigned to one sidekiq
|
48
|
+
# instance in order. When specified sidekiq_config will be ignored.
|
49
|
+
set :sidekiq_configs, -> {
|
50
|
+
[
|
51
|
+
# "#{fetch(:current_path)}/config/sidekiq_1.yml",
|
52
|
+
# "#{fetch(:current_path)}/config/sidekiq_2.yml"
|
53
|
+
]
|
54
|
+
}
|
55
|
+
|
46
56
|
# ### sidekiq_log
|
47
57
|
# Sets the path to the log file of sidekiq
|
48
58
|
#
|
@@ -61,6 +71,16 @@ set :sidekiq_processes, 1
|
|
61
71
|
# Sets the number of sidekiq threads per process (overrides value in sidekiq.yml)
|
62
72
|
set :sidekiq_concurrency, nil
|
63
73
|
|
74
|
+
set :sidekiq_user, nil
|
75
|
+
|
76
|
+
# Init system integration
|
77
|
+
set :init_system, -> { nil }
|
78
|
+
# systemd integration
|
79
|
+
set :service_unit_name, "sidekiq-#{fetch(:rails_env)}.service"
|
80
|
+
set :systemctl_command, 'systemctl --user'
|
81
|
+
|
82
|
+
set :upstart_service_name, "sidekiq"
|
83
|
+
|
64
84
|
# ## Control Tasks
|
65
85
|
namespace :sidekiq do
|
66
86
|
def for_each_process(&block)
|
@@ -78,15 +98,22 @@ namespace :sidekiq do
|
|
78
98
|
desc "Quiet sidekiq (stop accepting new work)"
|
79
99
|
task :quiet => :remote_environment do
|
80
100
|
comment 'Quiet sidekiq (stop accepting new work)'
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
101
|
+
case fetch(:init_system)
|
102
|
+
when :systemd
|
103
|
+
command %{ #{ fetch(:systemctl_command) } reload #{ fetch(:service_unit_name) } }
|
104
|
+
when :upstart
|
105
|
+
command %{ sudo service #{ fetch(:upstart_service_name) } reload }
|
106
|
+
else
|
107
|
+
in_path(fetch(:current_path)) do
|
108
|
+
for_each_process do |pid_file, idx|
|
109
|
+
command %{
|
110
|
+
if [ -f #{pid_file} ] && kill -0 `cat #{pid_file}` > /dev/null 2>&1; then
|
111
|
+
#{fetch(:sidekiqctl)} quiet #{pid_file}
|
112
|
+
else
|
113
|
+
echo 'Skip quiet command (no pid file found)'
|
114
|
+
fi
|
115
|
+
}.strip
|
116
|
+
end
|
90
117
|
end
|
91
118
|
end
|
92
119
|
end
|
@@ -95,15 +122,22 @@ namespace :sidekiq do
|
|
95
122
|
desc "Stop sidekiq"
|
96
123
|
task :stop => :remote_environment do
|
97
124
|
comment 'Stop sidekiq'
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
125
|
+
case fetch(:init_system)
|
126
|
+
when :systemd
|
127
|
+
command %{ #{ fetch(:systemctl_command) } stop #{ fetch(:service_unit_name) } }
|
128
|
+
when :upstart
|
129
|
+
command %{ sudo service #{ fetch(:upstart_service_name) } stop }
|
130
|
+
else
|
131
|
+
in_path(fetch(:current_path)) do
|
132
|
+
for_each_process do |pid_file, idx|
|
133
|
+
command %{
|
134
|
+
if [ -f #{pid_file} ] && kill -0 `cat #{pid_file}`> /dev/null 2>&1; then
|
135
|
+
#{fetch(:sidekiqctl)} stop #{pid_file} #{fetch(:sidekiq_timeout)}
|
136
|
+
else
|
137
|
+
echo 'Skip stopping sidekiq (no pid file found)'
|
138
|
+
fi
|
139
|
+
}.strip
|
140
|
+
end
|
107
141
|
end
|
108
142
|
end
|
109
143
|
end
|
@@ -112,19 +146,85 @@ namespace :sidekiq do
|
|
112
146
|
desc "Start sidekiq"
|
113
147
|
task :start => :remote_environment do
|
114
148
|
comment 'Start sidekiq'
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
149
|
+
case fetch(:init_system)
|
150
|
+
when :systemd
|
151
|
+
command %{ #{ fetch(:systemctl_command) } start #{ fetch(:service_unit_name) } }
|
152
|
+
when :upstart
|
153
|
+
command %{ sudo service #{ fetch(:upstart_service_name) } start }
|
154
|
+
else
|
155
|
+
in_path(fetch(:current_path)) do
|
156
|
+
for_each_process do |pid_file, idx|
|
157
|
+
sidekiq_config = fetch(:sidekiq_configs)[idx] || fetch(:sidekiq_config)
|
158
|
+
sidekiq_concurrency = fetch(:sidekiq_concurrency)
|
159
|
+
concurrency_arg = if sidekiq_concurrency.nil?
|
160
|
+
""
|
161
|
+
else
|
162
|
+
"-c #{sidekiq_concurrency}"
|
163
|
+
end
|
164
|
+
command_line = %[#{fetch(:sidekiq)} -d -e #{fetch(:rails_env)} #{concurrency_arg} -C #{sidekiq_config} -i #{idx} -P #{pid_file}]
|
165
|
+
command_line += " -L #{fetch(:sidekiq_log)}" if fetch(:sidekiq_log)
|
166
|
+
|
167
|
+
command command_line
|
168
|
+
end
|
124
169
|
end
|
125
170
|
end
|
126
171
|
end
|
127
172
|
|
173
|
+
task :install do
|
174
|
+
case fetch(:init_system)
|
175
|
+
when :systemd
|
176
|
+
create_systemd_template
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
task :uninstall do
|
181
|
+
case fetch(:init_system)
|
182
|
+
when :systemd
|
183
|
+
command %{ #{ fetch(:systemctl_command) } disable #{fetch(:service_unit_name)} }
|
184
|
+
command %{ rm #{File.join(fetch(:service_unit_path, fetch_systemd_unit_path),fetch(:service_unit_name))} }
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
def create_systemd_template
|
189
|
+
template = %{
|
190
|
+
[Unit]
|
191
|
+
Description=sidekiq for #{fetch(:application)} #{fetch(:app_name)}
|
192
|
+
After=syslog.target network.target
|
193
|
+
|
194
|
+
[Service]
|
195
|
+
Type=simple
|
196
|
+
Environment=RAILS_ENV=#{ fetch(:rails_env) }
|
197
|
+
StandardOutput=append:#{fetch(:deploy_to)}/current/log/sidekiq.log
|
198
|
+
StandardError=append:#{fetch(:deploy_to)}/current/log/sidekiq.log
|
199
|
+
WorkingDirectory=#{fetch(:deploy_to)}/current
|
200
|
+
ExecStart=#{fetch(:bundler_path, '/usr/local/bin/bundler')} exec sidekiq -e #{fetch(:rails_env)}
|
201
|
+
ExecReload=/bin/kill -TSTP $MAINPID
|
202
|
+
ExecStop=/bin/kill -TERM $MAINPID
|
203
|
+
RestartSec=1
|
204
|
+
Restart=on-failure
|
205
|
+
|
206
|
+
SyslogIdentifier=sidekiq
|
207
|
+
|
208
|
+
[Install]
|
209
|
+
WantedBy=default.target
|
210
|
+
}
|
211
|
+
systemd_path = fetch(:service_unit_path, fetch_systemd_unit_path)
|
212
|
+
service_path = systemd_path + "/" + fetch(:service_unit_name)
|
213
|
+
comment %{Creating systemctl unit file}
|
214
|
+
command %{ mkdir -p #{systemd_path} }
|
215
|
+
command %{ touch #{service_path} }
|
216
|
+
command %{ echo "#{ template }" > #{ service_path } }
|
217
|
+
comment %{Reloading systemctl daemon}
|
218
|
+
command %{ #{ fetch(:systemctl_command) } daemon-reload }
|
219
|
+
comment %{Enabling sidekiq service}
|
220
|
+
command %{ #{ fetch(:systemctl_command) } enable #{ service_path } }
|
221
|
+
end
|
222
|
+
|
223
|
+
def fetch_systemd_unit_path
|
224
|
+
home_dir = '/usr'
|
225
|
+
File.join(home_dir, "lib", "systemd", "user")
|
226
|
+
end
|
227
|
+
|
128
228
|
# ### sidekiq:restart
|
129
229
|
desc "Restart sidekiq"
|
130
230
|
task :restart do
|
@@ -136,4 +236,5 @@ namespace :sidekiq do
|
|
136
236
|
task :log => :remote_environment do
|
137
237
|
command %[tail -f #{fetch(:sidekiq_log)}]
|
138
238
|
end
|
239
|
+
|
139
240
|
end
|
data/lib/mina_sidekiq/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mina-sidekiq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joerg Thalheim
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 1980-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mina
|
@@ -77,7 +77,7 @@ homepage: http://github.com/Mic92/mina-sidekiq
|
|
77
77
|
licenses:
|
78
78
|
- MIT
|
79
79
|
metadata: {}
|
80
|
-
post_install_message:
|
80
|
+
post_install_message:
|
81
81
|
rdoc_options: []
|
82
82
|
require_paths:
|
83
83
|
- lib
|
@@ -92,9 +92,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '0'
|
94
94
|
requirements: []
|
95
|
-
|
96
|
-
|
97
|
-
signing_key:
|
95
|
+
rubygems_version: 3.1.3
|
96
|
+
signing_key:
|
98
97
|
specification_version: 4
|
99
98
|
summary: Tasks to deploy Sidekiq with mina.
|
100
99
|
test_files:
|