capistrano3-puma 0.2.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e653eb0ed24f3635af405e9eb27304a699fd08b6
4
- data.tar.gz: e85934ef3d68f2f5515dc667d2c5fd958f52a21b
3
+ metadata.gz: 48c6297166ac6479aff3f05e5a0ed5b14914d7cd
4
+ data.tar.gz: 2c7dc35a0fdae21d452184d2fa015e56ed6ebbf4
5
5
  SHA512:
6
- metadata.gz: 95a013f371218024fa1c83f849599a50401e7fd274cf0d5591ee9858cbb2f4496fe6c662ec7e8a1774a7bad3d092ac4812ed4de18e7967c4a85f7a107434d521
7
- data.tar.gz: afea24db1646f1daacd09da497d3b4fbfa5b85880edcb2773f4ca32b3deab351196e04a215a5991aea025853c3beed3f8d3904f47e75824d0ec4ba9a715ed6e0
6
+ metadata.gz: 0553ef2f9236710b405c83831345caf4c32b73fb990ff25079c8d1b27e722c2fb5063c301ef079848d4fbe11209c0c5b48bc3210398e13f25b420215a64b2901
7
+ data.tar.gz: 7c9848e750ab5774ef1d47a46143bc71c1aa82d23ccd4949d64e087cecacaf4f9a51a9c9c92e1d2735914e38971f7553d44feeb4d161e6282b35d2b4ba80f5a6
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2013 Abdelkader Boudih
3
+ Copyright (c) 2013-2014 Abdelkader Boudih
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,7 +1,5 @@
1
1
  # Capistrano::Puma
2
2
 
3
- In the current version the gem will expect a puma.rb in the shared directory, if it does not find puma.rb in the expected place it will automatically generate one with sane defaults. Keep in mind this means a puma.rb in the config directory or subdirectories will be ignored. During preparation for deployment you must start the process initially with bundle exec cap $stage puma:start , after starting the process bundle exec cap $stage deploy will work without hanging. The need to start the process initially will be addressed in a future release.
4
-
5
3
  ## Installation
6
4
 
7
5
  Add this line to your application's Gemfile:
@@ -21,6 +19,7 @@ And then execute:
21
19
  # Capfile
22
20
 
23
21
  require 'capistrano/puma'
22
+ require 'capistrano/puma/workers' #if you want to control the workers (in cluster mode)
24
23
  require 'capistrano/puma/jungle' #if you need the jungle tasks
25
24
  require 'capistrano/puma/monit' #if you need the monit tasks
26
25
  ```
@@ -29,6 +28,7 @@ And then execute:
29
28
  Configurable options, shown here with defaults: Please note the configuration options below are not required unless you are trying to override a default setting, for instance if you are deploying on a host on which you do not have sudo or root privileges and you need to restrict the path. These settings go in the deploy.rb file.
30
29
 
31
30
  ```ruby
31
+ set :puma_rackup, -> { File.join(current_path, 'config.ru') }
32
32
  set :puma_state, "#{shared_path}/tmp/pids/puma.state"
33
33
  set :puma_pid, "#{shared_path}/tmp/pids/puma.pid"
34
34
  set :puma_bind, "unix://#{shared_path}/tmp/sockets/puma.sock"
@@ -52,6 +52,12 @@ Ensure that the following directories are shared (via ``linked_dirs``):
52
52
  tmp/pids tmp/sockets log
53
53
 
54
54
  ## Changelog
55
+ - 0.3.5: Fixed a prehistoric bug
56
+ - 0.3.4: I don't remember what i did here
57
+ - 0.3.3: Puma jungle start fix
58
+ - 0.3.2: Tag option support (require puma 2.8.2+)
59
+ - 0.3.1: Typo fix
60
+ - 0.3.0: Initial support for puma signals
55
61
  - 0.2.2: Application pre-loading is optional now (set puma_preload_app to false to turn it off)
56
62
  - 0.2.1: Tasks are run within rack context
57
63
  - 0.2.0: Support for puma `ActiveRecord::Base.establish_connection` on
@@ -65,7 +71,6 @@ Ensure that the following directories are shared (via ``linked_dirs``):
65
71
  - 0.0.7: Gem pushed to rubygems as capistrano3-puma. Support of Redhat based OS for Jungle init script.
66
72
 
67
73
  ## TODO
68
- - Support to https://github.com/puma/puma/pull/399 with puma:workers:more, puma:workers:less
69
74
 
70
75
  ## Contributors
71
76
 
@@ -18,5 +18,6 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ['lib']
19
19
 
20
20
  spec.add_dependency 'capistrano', '~> 3.0'
21
+ spec.add_dependency 'puma' , '~> 0'
21
22
 
22
23
  end
@@ -17,5 +17,6 @@ Gem::Specification.new do |spec|
17
17
  spec.require_paths = ['lib']
18
18
 
19
19
  spec.add_dependency 'capistrano', '~> 3.0'
20
+ spec.add_dependency 'puma' , '~> 0'
20
21
 
21
22
  end
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Puma
3
- VERSION = '0.2.2'
3
+ VERSION = '0.3.3'
4
4
  end
5
5
  end
@@ -0,0 +1,2 @@
1
+ #load monit tasks
2
+ load File.expand_path('../../tasks/workers.cap', __FILE__)
@@ -16,12 +16,12 @@ namespace :puma do
16
16
  template_puma 'run-puma', "#{fetch(:tmp_dir)}/run-puma", role
17
17
  execute "chmod +x #{fetch(:tmp_dir)}/run-puma"
18
18
  sudo "mv #{fetch(:tmp_dir)}/run-puma #{fetch(:puma_run_path)}"
19
- if test '[ -f /etc/lsb-release ]'
20
- #Debian flavor OS
21
- debian_install
22
- elsif test '[ -f /etc/redhat-release ]'
19
+ if test '[ -f /etc/redhat-release ]'
23
20
  #RHEL flavor OS
24
21
  rhel_install
22
+ elsif test '[ -f /etc/lsb-release ]'
23
+ #Debian flavor OS
24
+ debian_install
25
25
  else
26
26
  #Some other OS
27
27
  error 'This task is not supported for your OS'
@@ -72,7 +72,7 @@ namespace :puma do
72
72
  desc "#{command} puma"
73
73
  task command do
74
74
  on roles(fetch(:puma_role)) do
75
- sudo "service puma #{command} #{current_path}"
75
+ sudo "service puma #{command} app=#{current_path}"
76
76
  end
77
77
  end
78
78
  end
@@ -1,11 +1,12 @@
1
1
  namespace :load do
2
2
  task :defaults do
3
3
  set :puma_role, :app
4
- set :puma_env, -> { fetch(:rack_env, fetch(:rails_env, 'production')) }
4
+ set :puma_env, -> { fetch(:rack_env, fetch(:rails_env, fetch(:stage))) }
5
5
  # Configure "min" to be the minimum number of threads to use to answer
6
6
  # requests and "max" the maximum.
7
7
  set :puma_threads, [0, 16]
8
8
  set :puma_workers, 0
9
+ set :puma_rackup, -> { File.join(current_path, 'config.ru') }
9
10
  set :puma_state, -> { File.join(shared_path, 'tmp', 'pids', 'puma.state') }
10
11
  set :puma_pid, -> { File.join(shared_path, 'tmp', 'pids', 'puma.pid') }
11
12
  set :puma_bind, -> { File.join('unix://', shared_path, 'tmp', 'sockets', 'puma.sock') }
@@ -35,27 +36,37 @@ namespace :puma do
35
36
  on roles (fetch(:puma_role)) do
36
37
  within current_path do
37
38
  with rack_env: fetch(:puma_env) do
39
+
38
40
  execute :bundle, 'exec', :puma, "-C #{fetch(:puma_conf)}"
39
41
  end
40
42
  end
41
43
  end
42
44
  end
43
45
 
44
- %w[halt stop status].each do |command|
46
+ %w[halt stop status].map do |command|
45
47
  desc "#{command} puma"
46
48
  task command do
47
49
  on roles (fetch(:puma_role)) do
48
50
  within current_path do
49
51
  with rack_env: fetch(:puma_env) do
50
- execute :bundle, 'exec', :pumactl, "-S #{fetch(:puma_state)} #{command}"
52
+ if test "[ -f #{fetch(:puma_pid)} ]"
53
+ if test "kill -0 $( cat #{fetch(:puma_pid)} )"
54
+ execute :bundle, 'exec', :pumactl, "-S #{fetch(:puma_state)} #{command}"
55
+ else
56
+ # delete invalid pid file , process is not running.
57
+ execute :rm, fetch(:puma_pid)
58
+ end
59
+ else
60
+ #pid file not found, so puma is probably not running or it using another pidfile
61
+ warn 'Puma not running'
62
+ end
51
63
  end
52
64
  end
53
65
  end
54
66
  end
55
67
  end
56
68
 
57
-
58
- %w[phased-restart restart].each do |command|
69
+ %w[phased-restart restart].map do |command|
59
70
  desc "#{command} puma"
60
71
  task command do
61
72
  on roles (fetch(:puma_role)) do
@@ -74,7 +85,6 @@ namespace :puma do
74
85
  end
75
86
  end
76
87
 
77
-
78
88
  task :check do
79
89
  on roles (fetch(:puma_role)) do |role|
80
90
  #Create puma.rb for new deployments
@@ -97,10 +107,23 @@ namespace :puma do
97
107
  end
98
108
  after 'deploy:finished', 'puma:smart_restart'
99
109
 
110
+
100
111
  def puma_workers
101
112
  fetch(:puma_workers) || 0
102
113
  end
103
114
 
115
+ def puma_tag
116
+ if fetch(:puma_tag)
117
+ # Versions(puma) prior to 2.8.2 don't support tag option
118
+ if Gem.loaded_specs['puma'].version >= Gem::Version.new('2.8.2')
119
+ return "tag '#{fetch(:puma_tag)}'"
120
+ else
121
+ warn 'Version puma 2.8.2+ required for tag option: Tag not set'
122
+ end
123
+ return
124
+ end
125
+ end
126
+
104
127
  def template_puma(from, to, role)
105
128
  [
106
129
  "lib/capistrano/templates/#{from}-#{role.hostname}-#{fetch(:stage)}.rb",
@@ -0,0 +1,34 @@
1
+ namespace :puma do
2
+ namespace :workers do
3
+ desc 'Add a worker'
4
+ task :count do
5
+ on roles (fetch(:puma_role)) do
6
+ #TODO
7
+ # cleanup
8
+ # add host name/ip
9
+ workers_count = capture("ps ax | grep -c 'puma: cluster worker: `cat #{fetch(:puma_pid)}`'").to_i - 1
10
+ log "Workers count : #{workers_count}"
11
+ end
12
+ end
13
+
14
+ # TODO
15
+ # Add/remove workers to specific host/s
16
+ # Define # of workers to add/remove
17
+ # Refractor
18
+ desc 'Worker++'
19
+ task :more do
20
+ on roles (fetch(:puma_role)) do
21
+ execute("kill -TTIN `cat #{fetch(:puma_pid)}`")
22
+ end
23
+ end
24
+
25
+ desc 'Worker--'
26
+ task :less do
27
+ on roles (fetch(:puma_role)) do
28
+ execute("kill -TTOU `cat #{fetch(:puma_pid)}`")
29
+ end
30
+ end
31
+
32
+
33
+ end
34
+ end
@@ -131,7 +131,7 @@ do_restart_one() {
131
131
  dir=`echo $i | cut -d , -f 1`
132
132
  if [ -e $PIDFILE ]; then
133
133
  log_daemon_msg "--> About to restart puma $1"
134
- pumactl --state $dir/tmp/pigs/puma.state restart
134
+ pumactl --state $dir/tmp/pids/puma.state restart
135
135
 
136
136
  else
137
137
  log_daemon_msg "--> Your puma was never playing... Let's get it out there first"
@@ -1,14 +1,19 @@
1
1
  #!/usr/bin/env puma
2
2
 
3
3
  directory '<%= current_path %>'
4
+ rackup "<%=fetch(:puma_rackup)%>"
4
5
  environment '<%= fetch(:puma_env) %>'
6
+ <%= puma_tag %>
5
7
  daemonize true
6
8
  pidfile "<%=fetch(:puma_pid)%>"
7
9
  state_path "<%=fetch(:puma_state)%>"
8
10
  stdout_redirect '<%=fetch(:puma_access_log)%>', '<%=fetch(:puma_error_log)%>', true
11
+
12
+
9
13
  threads <%=fetch(:puma_threads).join(',')%>
10
14
  bind "<%=fetch(:puma_bind)%>"
11
15
 
16
+
12
17
  workers <%= puma_workers %>
13
18
  <% if fetch(:puma_preload_app) %>
14
19
  preload_app!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano3-puma
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abdelkader Boudih
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-06 00:00:00.000000000 Z
11
+ date: 2014-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: puma
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: Puma integration for Capistrano 3
28
42
  email:
29
43
  - Terminale@gmail.com
@@ -43,9 +57,11 @@ files:
43
57
  - lib/capistrano/puma/jungle.rb
44
58
  - lib/capistrano/puma/monit.rb
45
59
  - lib/capistrano/puma/version.rb
60
+ - lib/capistrano/puma/workers.rb
46
61
  - lib/capistrano/tasks/jungle.cap
47
62
  - lib/capistrano/tasks/monit.cap
48
63
  - lib/capistrano/tasks/puma.cap
64
+ - lib/capistrano/tasks/workers.cap
49
65
  - lib/capistrano/templates/puma-deb.erb
50
66
  - lib/capistrano/templates/puma-rpm.erb
51
67
  - lib/capistrano/templates/puma.rb.erb
@@ -71,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
87
  version: '0'
72
88
  requirements: []
73
89
  rubyforge_project:
74
- rubygems_version: 2.1.11
90
+ rubygems_version: 2.2.2
75
91
  signing_key:
76
92
  specification_version: 4
77
93
  summary: Puma integration for Capistrano