capistrano-sidekiq-docker 0.1
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 +7 -0
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/README.md +42 -0
- data/Rakefile +1 -0
- data/capistrano-sidekiq-docker.gemspec +22 -0
- data/lib/capistrano-sidekiq-docker.rb +0 -0
- data/lib/capistrano/.DS_Store +0 -0
- data/lib/capistrano/sidekiq.rb +1 -0
- data/lib/capistrano/sidekiq/.DS_Store +0 -0
- data/lib/capistrano/sidekiq/docker/version.rb +7 -0
- data/lib/capistrano/tasks/sidekiq.rake +167 -0
- metadata +83 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 838a4bfdb70383fcb2048771e6634d4a5df1f8bf
|
4
|
+
data.tar.gz: 4023ec21c60ee13eec1dac9c42182522dbff4d1b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 85f4ec27b53c0870cec3909a4f80f66da2479b7abd72418aa598b65635f615f8adf4103c5cc8715e4c53db6034857f6811f3f6748061dd65b6287a95088e0029
|
7
|
+
data.tar.gz: b3eaf8411b484e9d8d05dcd51715e1bd546a8568a687cdcaab9c821afd33429f9f78a55252282775f44e67c49b8dd6efb4e05209507c2eb98ba099cb5e18da4e
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# Capistrano-sidekiq-docker
|
2
|
+
|
3
|
+
Added capistrano support to deploy sidekiq on the docker containers.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
gem 'capistrano-sidekiq-docker', group: :development
|
8
|
+
|
9
|
+
And then execute:
|
10
|
+
|
11
|
+
$ bundle
|
12
|
+
|
13
|
+
|
14
|
+
## Usage
|
15
|
+
```ruby
|
16
|
+
# Capfile
|
17
|
+
require 'capistrano/sidekiq'
|
18
|
+
```
|
19
|
+
|
20
|
+
|
21
|
+
Configurable options:
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
set :sidekiq_release_path, -> { nil }
|
25
|
+
set :sidekiq_shared_path, -> { nil }
|
26
|
+
set :sidekiq_pid, -> { File.join(fetch(:sidekiq_shared_path) || fetch(:shared_path), 'tmp', 'pids', 'sidekiq.pid') }
|
27
|
+
set :sidekiq_role, -> { :app }
|
28
|
+
set :sidekiq_processes, -> { 1 }
|
29
|
+
set :sidekiq_user, -> { nil }
|
30
|
+
set :sidekiq_docker_compose_file_path, -> { '/etc/docker/sidekiq/docker-compose.yml' }
|
31
|
+
set :sidekiq_docker_env_options, -> { nil }
|
32
|
+
set :sidekiq_docker_container_name, -> { nil }
|
33
|
+
set :sidekiq_docker_image_name, -> { 'sidekiq' }
|
34
|
+
```
|
35
|
+
|
36
|
+
## Contributing
|
37
|
+
|
38
|
+
1. Fork it
|
39
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
40
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
41
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
42
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'capistrano/sidekiq/docker/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'capistrano-sidekiq-docker'
|
8
|
+
spec.version = Capistrano::Sidekiq::Docker::VERSION
|
9
|
+
spec.authors = ['Vasu Adari']
|
10
|
+
spec.email = ['vasuakeel@gmail.com']
|
11
|
+
spec.summary = %q{Capistrano support to deploy sidekiq on docker}
|
12
|
+
spec.description = %q{Deploy sidekiq on docker}
|
13
|
+
spec.homepage = 'https://github.com/vasuadari/capistrano-sidekiq-docker'
|
14
|
+
spec.license = 'LGPL-3.0'
|
15
|
+
|
16
|
+
spec.required_ruby_version = '>= 1.9.3'
|
17
|
+
spec.files = `git ls-files`.split($/)
|
18
|
+
spec.require_paths = ['lib']
|
19
|
+
|
20
|
+
spec.add_dependency 'capistrano', '>= 3.0'
|
21
|
+
spec.add_dependency 'sidekiq', '>= 3.4'
|
22
|
+
end
|
File without changes
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
load File.expand_path('../tasks/sidekiq.rake', __FILE__)
|
Binary file
|
@@ -0,0 +1,167 @@
|
|
1
|
+
namespace :load do
|
2
|
+
task :defaults do
|
3
|
+
set :sidekiq_default_hooks, -> { true }
|
4
|
+
|
5
|
+
set :sidekiq_release_path, -> { nil }
|
6
|
+
set :sidekiq_shared_path, -> { nil }
|
7
|
+
set :sidekiq_pid, -> { File.join(fetch(:sidekiq_shared_path) || fetch(:shared_path), 'tmp', 'pids', 'sidekiq.pid') }
|
8
|
+
set :sidekiq_role, -> { :app }
|
9
|
+
set :sidekiq_processes, -> { 1 }
|
10
|
+
set :sidekiq_user, -> { nil }
|
11
|
+
set :sidekiq_docker_compose_file_path, -> { '/etc/docker/sidekiq/docker-compose.yml' }
|
12
|
+
set :sidekiq_docker_env_options, -> { nil }
|
13
|
+
set :sidekiq_docker_container_name, -> { nil }
|
14
|
+
set :sidekiq_docker_image_name, -> { 'sidekiq' }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
namespace :deploy do
|
19
|
+
before :starting, :check_sidekiq_hooks do
|
20
|
+
invoke 'sidekiq:add_default_hooks' if fetch(:sidekiq_default_hooks)
|
21
|
+
end
|
22
|
+
after :publishing, :restart_sidekiq do
|
23
|
+
invoke 'sidekiq:restart' if fetch(:sidekiq_default_hooks)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
namespace :sidekiq do
|
28
|
+
def for_each_process(reverse = false, &block)
|
29
|
+
pids = processes_pids
|
30
|
+
pids.reverse! if reverse
|
31
|
+
pids.each_with_index do |pid_file, idx|
|
32
|
+
within fetch(:sidekiq_release_path) do
|
33
|
+
yield(pid_file, idx)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def processes_pids
|
39
|
+
pids = []
|
40
|
+
sidekiq_roles = Array(fetch(:sidekiq_role))
|
41
|
+
sidekiq_roles.each do |role|
|
42
|
+
next unless host.roles.include?(role)
|
43
|
+
processes = fetch(:"#{ role }_processes") || fetch(:sidekiq_processes)
|
44
|
+
processes.times do |idx|
|
45
|
+
pids.push fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
pids
|
50
|
+
end
|
51
|
+
|
52
|
+
def pid_file_exists?(pid_file)
|
53
|
+
test(*("[ -f #{pid_file} ]").split(' '))
|
54
|
+
end
|
55
|
+
|
56
|
+
def stop_sidekiq(pid_file)
|
57
|
+
execute "docker exec -i #{fetch(:sidekiq_docker_container_name)} kill -TERM `cat #{pid_file}`"
|
58
|
+
end
|
59
|
+
|
60
|
+
def quiet_sidekiq(pid_file)
|
61
|
+
execute "docker exec -i #{fetch(:sidekiq_docker_container_name)} kill -USR1 `cat #{pid_file}`"
|
62
|
+
end
|
63
|
+
|
64
|
+
def start_sidekiq
|
65
|
+
execute "#{fetch(:sidekiq_docker_env_options)} docker-compose -f #{fetch(:sidekiq_docker_compose_file_path)} up -d"
|
66
|
+
end
|
67
|
+
|
68
|
+
def restart_sidekiq
|
69
|
+
execute "#{fetch(:sidekiq_docker_env_options)} docker-compose -f #{fetch(:sidekiq_docker_compose_file_path)} restart #{fetch(:sidekiq_docker_image_name)}"
|
70
|
+
end
|
71
|
+
|
72
|
+
task :add_default_hooks do
|
73
|
+
after 'deploy:starting', 'sidekiq:quiet'
|
74
|
+
after 'deploy:updated', 'sidekiq:stop'
|
75
|
+
after 'deploy:reverted', 'sidekiq:stop'
|
76
|
+
after 'deploy:published', 'sidekiq:start'
|
77
|
+
end
|
78
|
+
|
79
|
+
desc 'Quiet sidekiq (stop processing new tasks)'
|
80
|
+
task :quiet do
|
81
|
+
on roles fetch(:sidekiq_role) do |role|
|
82
|
+
switch_user(role) do
|
83
|
+
if test("[ -d #{fetch(:sidekiq_release_path)} ]") # fixes #11
|
84
|
+
for_each_process(true) do |pid_file, idx|
|
85
|
+
if pid_file_exists?(pid_file)
|
86
|
+
quiet_sidekiq(pid_file)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
desc 'Stop sidekiq'
|
95
|
+
task :stop do
|
96
|
+
on roles fetch(:sidekiq_role) do |role|
|
97
|
+
switch_user(role) do
|
98
|
+
if test("[ -d #{fetch(:sidekiq_release_path)} ]")
|
99
|
+
for_each_process(true) do |pid_file, idx|
|
100
|
+
if pid_file_exists?(pid_file)
|
101
|
+
stop_sidekiq(pid_file)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
desc 'Start sidekiq'
|
110
|
+
task :start do
|
111
|
+
on roles fetch(:sidekiq_role) do |role|
|
112
|
+
switch_user(role) do
|
113
|
+
start_sidekiq
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
desc 'Restart sidekiq'
|
119
|
+
task :restart do
|
120
|
+
on roles fetch(:sidekiq_role) do |role|
|
121
|
+
switch_user(role) do
|
122
|
+
restart_sidekiq
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
desc 'Rolling-restart sidekiq'
|
128
|
+
task :rolling_restart do
|
129
|
+
on roles fetch(:sidekiq_role) do |role|
|
130
|
+
switch_user(role) do
|
131
|
+
restart_sidekiq
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
# Delete any pid file not in use
|
137
|
+
task :cleanup do
|
138
|
+
on roles fetch(:sidekiq_role) do |role|
|
139
|
+
switch_user(role) do
|
140
|
+
for_each_process do |pid_file, idx|
|
141
|
+
if pid_file_exists?(pid_file)
|
142
|
+
execute "rm #{pid_file}" unless pid_file_exists?(pid_file)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def switch_user(role, &block)
|
150
|
+
su_user = sidekiq_user(role)
|
151
|
+
if su_user == role.user
|
152
|
+
block.call
|
153
|
+
else
|
154
|
+
as su_user do
|
155
|
+
block.call
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def sidekiq_user(role)
|
161
|
+
properties = role.properties
|
162
|
+
properties.fetch(:sidekiq_user) || # local property for sidekiq only
|
163
|
+
fetch(:sidekiq_user) ||
|
164
|
+
properties.fetch(:run_as) || # global property across multiple capistrano gems
|
165
|
+
role.user
|
166
|
+
end
|
167
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capistrano-sidekiq-docker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Vasu Adari
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: capistrano
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sidekiq
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.4'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.4'
|
41
|
+
description: Deploy sidekiq on docker
|
42
|
+
email:
|
43
|
+
- vasuakeel@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- Gemfile
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- capistrano-sidekiq-docker.gemspec
|
53
|
+
- lib/capistrano-sidekiq-docker.rb
|
54
|
+
- lib/capistrano/.DS_Store
|
55
|
+
- lib/capistrano/sidekiq.rb
|
56
|
+
- lib/capistrano/sidekiq/.DS_Store
|
57
|
+
- lib/capistrano/sidekiq/docker/version.rb
|
58
|
+
- lib/capistrano/tasks/sidekiq.rake
|
59
|
+
homepage: https://github.com/vasuadari/capistrano-sidekiq-docker
|
60
|
+
licenses:
|
61
|
+
- LGPL-3.0
|
62
|
+
metadata: {}
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options: []
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 1.9.3
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
requirements: []
|
78
|
+
rubyforge_project:
|
79
|
+
rubygems_version: 2.0.14
|
80
|
+
signing_key:
|
81
|
+
specification_version: 4
|
82
|
+
summary: Capistrano support to deploy sidekiq on docker
|
83
|
+
test_files: []
|