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.
@@ -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
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in capistrano-sidekiq-docker.gemspec
4
+ gemspec
@@ -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
@@ -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__)
@@ -0,0 +1,7 @@
1
+ module Capistrano
2
+ module Sidekiq
3
+ module Docker
4
+ VERSION = '0.1'
5
+ end
6
+ end
7
+ end
@@ -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: []