capistrano3-unicorn 0.1.1 → 0.2.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 +13 -5
- data/.gitignore +4 -0
- data/CHANGELOG.md +14 -0
- data/Gemfile +3 -0
- data/README.md +23 -10
- data/Rakefile +1 -0
- data/capistrano3-unicorn.gemspec +2 -2
- data/examples/unicorn.rb +47 -0
- data/lib/capistrano3/tasks/unicorn.rake +17 -4
- metadata +17 -7
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NmNiYWFhN2NkM2ZhZTI0MzMyNGFkM2RmMzQxODc4MjNmM2Y5N2VhYQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YTMyMWNjM2I2YjIxN2Q2ODRmYzg4ZTZkOTk1NzZiNjg5NjUwNjUyYQ==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NzkzYzI2ODJkYTMyYTcxYjg5ZTE5ODRlNDQ5MzZiMmQzYzRjMDFjNGE5MGMy
|
10
|
+
ZmQ3ZDlkNmM3NGRkYThhZmM5MzU0NjcxYTViNWUyZWNlMTA2YTJjZTU3ODQ3
|
11
|
+
NzA1OTc2YTFiZjVhNDdmMjk2ZWQ2NmU3ODE0YjhkMDk5YWYzMzk=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MmQ5OTRhOTBjMjViMjNiZGI4NjJiNzIzODgxMzZiOWRkMzdkZTA5Y2NmNDZi
|
14
|
+
ZWZmMDQxZWM1ZjU2Y2NhNTUzODc3MWI2MWE1ODMxMjBjYjRkZjZkMTBkYzhj
|
15
|
+
Yzg4YzViMWY2ZWI2MGE1ZDhlNzZiMThkMmFiNWMwNzVmNTk3Nzk=
|
data/.gitignore
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# Capistrano3 Unicorn Changelog
|
2
2
|
|
3
|
+
## `0.2.1`
|
4
|
+
|
5
|
+
- Revert `:unicorn_config_path` falling back to `config/unicorn/unicorn.rb` due to flawed implementation
|
6
|
+
|
7
|
+
## `0.2.0`
|
8
|
+
|
9
|
+
- `unicorn:restart` no longer sends QUIT to oldbin since most people use a callback in `unicorn.rb`
|
10
|
+
- `unicorn:legacy_restart` preserves the QUIT to oldbin
|
11
|
+
- `:unicorn_config_path` adds `config/unicorn/unicorn.rb` as a default path
|
12
|
+
- added example unicorn.rb
|
13
|
+
- removed `:unicorn_bundle_gemfile`, this should have been in a before_exec in the unicorn configuration
|
14
|
+
|
15
|
+
Thanks to @spectator, @lxxdn, @ahorner, and @soulcutter
|
16
|
+
|
3
17
|
## `0.1.1`
|
4
18
|
|
5
19
|
- Removed default value for `:unicorn_bundle_gemfile` of `:bundle_gemfile` so that current_path is the default
|
data/Gemfile
ADDED
data/README.md
CHANGED
@@ -12,21 +12,17 @@ This is a capistrano v3 plugin that integrates Unicorn tasks into capistrano dep
|
|
12
12
|
|
13
13
|
### Conventions
|
14
14
|
|
15
|
-
You can override the defaults by `set :unicorn_example, value` in the `config/deploy.rb` or `config/deploy/ENVIRONMENT.rb` capistrano deployment files
|
15
|
+
You can override the defaults by `set :unicorn_example, value` in the `config/deploy.rb` or `config/deploy/ENVIRONMENT.rb` capistrano deployment files.
|
16
16
|
|
17
|
-
-
|
17
|
+
Example Unicorn config [examples/unicorn.rb](https://github.com/tablexi/capistrano3-unicorn/blob/master/examples/unicorn.rb)
|
18
18
|
|
19
|
-
|
19
|
+
- `:unicorn_pid`
|
20
20
|
|
21
|
-
|
21
|
+
Default assumes your pid file will be located in `CURRENT_PATH/tmp/pids/unicorn.pid`. The unicorn_pid should be defined with an absolute path.
|
22
22
|
|
23
23
|
- `:unicorn_config_path`
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
- `:unicorn_restart_sleep_time`
|
28
|
-
|
29
|
-
When performing zero-downtime deployment via the `unicorn:restart` task, send the USR2 signal, sleep for this many seconds (defaults to 3), then send the QUIT signal
|
25
|
+
Default assumes that your Unicorn configuration will be located in `CURRENT_PATH/config/unicorn/RAILS_ENV.rb`
|
30
26
|
|
31
27
|
- `:unicorn_roles`
|
32
28
|
|
@@ -42,7 +38,13 @@ You can override the defaults by `set :unicorn_example, value` in the `config/de
|
|
42
38
|
|
43
39
|
- `:unicorn_bundle_gemfile`
|
44
40
|
|
45
|
-
|
41
|
+
***REMOVED in v0.2.0***
|
42
|
+
|
43
|
+
Set the BUNDLE_GEMFILE in a before_exec block in your unicorn.rb. See [sandbox](http://unicorn.bogomips.org/Sandbox.html) and [unicorn-restart-issue-with-capistrano](https://stackoverflow.com/questions/8330577/unicorn-restart-issue-with-capistrano)
|
44
|
+
|
45
|
+
- `:unicorn_restart_sleep_time`
|
46
|
+
|
47
|
+
In `unicorn:legacy_restart` send the USR2 signal, sleep for this many seconds (defaults to 3), then send the QUIT signal
|
46
48
|
|
47
49
|
### Setup
|
48
50
|
|
@@ -73,6 +75,17 @@ namespace :deploy do
|
|
73
75
|
end
|
74
76
|
```
|
75
77
|
|
78
|
+
If `preload_app:true` and you need capistrano to cleanup your oldbin pid use:
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
after 'deploy:publishing', 'deploy:restart'
|
82
|
+
namespace :deploy do
|
83
|
+
task :restart do
|
84
|
+
invoke 'unicorn:legacy_restart'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
```
|
88
|
+
|
76
89
|
Otherwise use:
|
77
90
|
|
78
91
|
```ruby
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/capistrano3-unicorn.gemspec
CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.name = "capistrano3-unicorn"
|
6
|
-
gem.version = '0.
|
6
|
+
gem.version = '0.2.1'
|
7
7
|
gem.authors = ["Matthew Lineen"]
|
8
8
|
gem.email = ["matthew@lineen.com"]
|
9
9
|
gem.description = "Unicorn specific Capistrano tasks"
|
@@ -15,5 +15,5 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
16
16
|
gem.require_paths = ["lib"]
|
17
17
|
|
18
|
-
gem.
|
18
|
+
gem.add_runtime_dependency 'capistrano', '~> 3.1', '>= 3.1.0'
|
19
19
|
end
|
data/examples/unicorn.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# paths
|
2
|
+
app_path = "/home/example/www.example.com"
|
3
|
+
working_directory "#{app_path}/current"
|
4
|
+
pid "#{app_path}/current/tmp/pids/unicorn.pid"
|
5
|
+
|
6
|
+
# listen
|
7
|
+
listen "/tmp/unicorn-www.example.com.socket", :backlog => 64
|
8
|
+
|
9
|
+
# logging
|
10
|
+
stderr_path "log/unicorn.stderr.log"
|
11
|
+
stdout_path "log/unicorn.stdout.log"
|
12
|
+
|
13
|
+
# workers
|
14
|
+
worker_processes 3
|
15
|
+
|
16
|
+
# use correct Gemfile on restarts
|
17
|
+
before_exec do |server|
|
18
|
+
ENV['BUNDLE_GEMFILE'] = "#{app_path}/current/Gemfile"
|
19
|
+
end
|
20
|
+
|
21
|
+
# preload
|
22
|
+
preload_app true
|
23
|
+
|
24
|
+
before_fork do |server, worker|
|
25
|
+
# the following is highly recomended for Rails + "preload_app true"
|
26
|
+
# as there's no need for the master process to hold a connection
|
27
|
+
if defined?(ActiveRecord::Base)
|
28
|
+
ActiveRecord::Base.connection.disconnect!
|
29
|
+
end
|
30
|
+
|
31
|
+
# Before forking, kill the master process that belongs to the .oldbin PID.
|
32
|
+
# This enables 0 downtime deploys.
|
33
|
+
old_pid = "#{server.config[:pid]}.oldbin"
|
34
|
+
if File.exists?(old_pid) && server.pid != old_pid
|
35
|
+
begin
|
36
|
+
Process.kill("QUIT", File.read(old_pid).to_i)
|
37
|
+
rescue Errno::ENOENT, Errno::ESRCH
|
38
|
+
# someone else did our job for us
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
after_fork do |server, worker|
|
44
|
+
if defined?(ActiveRecord::Base)
|
45
|
+
ActiveRecord::Base.establish_connection
|
46
|
+
end
|
47
|
+
end
|
@@ -2,11 +2,10 @@ namespace :load do
|
|
2
2
|
task :defaults do
|
3
3
|
set :unicorn_pid, -> { File.join(current_path, "tmp", "pids", "unicorn.pid") }
|
4
4
|
set :unicorn_config_path, -> { File.join(current_path, "config", "unicorn", "#{fetch(:rails_env)}.rb") }
|
5
|
-
set :unicorn_restart_sleep_time, 3
|
6
5
|
set :unicorn_roles, -> { :app }
|
7
6
|
set :unicorn_options, -> { "" }
|
8
7
|
set :unicorn_rack_env, -> { fetch(:rails_env) == "development" ? "development" : "deployment" }
|
9
|
-
set :
|
8
|
+
set :unicorn_restart_sleep_time, 3
|
10
9
|
end
|
11
10
|
end
|
12
11
|
|
@@ -18,7 +17,7 @@ namespace :unicorn do
|
|
18
17
|
if test("[ -e #{fetch(:unicorn_pid)} ] && kill -0 #{pid}")
|
19
18
|
info "unicorn is running..."
|
20
19
|
else
|
21
|
-
with rails_env: fetch(:rails_env)
|
20
|
+
with rails_env: fetch(:rails_env) do
|
22
21
|
execute :bundle, "exec unicorn", "-c", fetch(:unicorn_config_path), "-E", fetch(:unicorn_rack_env), "-D", fetch(:unicorn_options)
|
23
22
|
end
|
24
23
|
end
|
@@ -56,13 +55,27 @@ namespace :unicorn do
|
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
59
|
-
desc "Restart Unicorn (USR2
|
58
|
+
desc "Restart Unicorn (USR2); use this when preload_app: true"
|
60
59
|
task :restart do
|
61
60
|
invoke "unicorn:start"
|
62
61
|
on roles(fetch(:unicorn_roles)) do
|
63
62
|
within current_path do
|
64
63
|
info "unicorn restarting..."
|
65
64
|
execute :kill, "-s USR2", pid
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
desc "Duplicate Unicorn; alias of unicorn:restart"
|
70
|
+
task :duplicate do
|
71
|
+
invoke "unicorn:restart"
|
72
|
+
end
|
73
|
+
|
74
|
+
desc "Legacy Restart (USR2 + QUIT); use this when preload_app: true and oldbin pid needs cleanup"
|
75
|
+
task :legacy_restart do
|
76
|
+
invoke "unicorn:restart"
|
77
|
+
on roles(fetch(:unicorn_roles)) do
|
78
|
+
within current_path do
|
66
79
|
execute :sleep, fetch(:unicorn_restart_sleep_time)
|
67
80
|
if test("[ -e #{fetch(:unicorn_pid)}.oldbin ]")
|
68
81
|
execute :kill, "-s QUIT", pid_oldbin
|
metadata
CHANGED
@@ -1,27 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano3-unicorn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Lineen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.1'
|
20
|
+
- - ! '>='
|
18
21
|
- !ruby/object:Gem::Version
|
19
22
|
version: 3.1.0
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.1'
|
30
|
+
- - ! '>='
|
25
31
|
- !ruby/object:Gem::Version
|
26
32
|
version: 3.1.0
|
27
33
|
description: Unicorn specific Capistrano tasks
|
@@ -31,10 +37,14 @@ executables: []
|
|
31
37
|
extensions: []
|
32
38
|
extra_rdoc_files: []
|
33
39
|
files:
|
40
|
+
- .gitignore
|
34
41
|
- CHANGELOG.md
|
42
|
+
- Gemfile
|
35
43
|
- LICENSE
|
36
44
|
- README.md
|
45
|
+
- Rakefile
|
37
46
|
- capistrano3-unicorn.gemspec
|
47
|
+
- examples/unicorn.rb
|
38
48
|
- lib/capistrano3-unicorn.rb
|
39
49
|
- lib/capistrano3/tasks/unicorn.rake
|
40
50
|
- lib/capistrano3/unicorn.rb
|
@@ -48,17 +58,17 @@ require_paths:
|
|
48
58
|
- lib
|
49
59
|
required_ruby_version: !ruby/object:Gem::Requirement
|
50
60
|
requirements:
|
51
|
-
- - '>='
|
61
|
+
- - ! '>='
|
52
62
|
- !ruby/object:Gem::Version
|
53
63
|
version: '0'
|
54
64
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
65
|
requirements:
|
56
|
-
- - '>='
|
66
|
+
- - ! '>='
|
57
67
|
- !ruby/object:Gem::Version
|
58
68
|
version: '0'
|
59
69
|
requirements: []
|
60
70
|
rubyforge_project:
|
61
|
-
rubygems_version: 2.
|
71
|
+
rubygems_version: 2.2.2
|
62
72
|
signing_key:
|
63
73
|
specification_version: 4
|
64
74
|
summary: Unicorn specific Capistrano tasks
|