luban-rack 0.1.2 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cbb9ea87d6f534b68912727570e3c6233ef32685
4
- data.tar.gz: de08144a0493b050f6d979f62c5ac789f6dfbf2e
3
+ metadata.gz: 1cc2a9b8d82a3f7b19a886d7764abf720f68af5a
4
+ data.tar.gz: 5c0d00834f557af998d748aca309b7833861243e
5
5
  SHA512:
6
- metadata.gz: bd634449efb923be8f666a6da47ca5a7db3d8505de69e26de267852536217f906990b82367534b8bc608f2290417e8d3cddaa22da4800f6d0617f1a1fd653b41
7
- data.tar.gz: 454d1316ad6cbec1cac6eef112a1dd2099198c69abadca773b128923a59cc220baaf28e2a1e8e878974e9d857ff47ea356fb42d83e08c3a3bd2895f54aef3ada
6
+ metadata.gz: 28e1eddb36d0e8905fa6809efa5d688febe92f0c203b22fe87d79c7879019622dfcf77d830b536314c3984636401b5f170cfd270020d692d288f5025072a456b
7
+ data.tar.gz: e45cfdbe7242f157b8928929a5da609104fd55fe1323584ee2b0629615291da3c0935253b1c118b052ebb263cfe616979e3162cf55a4d2e00543a22979385283
data/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # Change log
2
2
 
3
+ ## Version 0.2.0 (Aug 02, 2016)
4
+
5
+ New features:
6
+ * Supported Puma as web server option
7
+ * Enhanced Thin cluster support
8
+
9
+ Minor enhancements:
10
+ * Used convenient method #application_action to define action method for phased restart
11
+ * Updated gem dependency on luban to version 0.6.7
12
+ * Renamed nginx template file for Thin/Puma for better file naming conventions
13
+ * Added #public_files_path to specify static contents served by Rack application
14
+ * Added convenient methods to manage web servers:
15
+ * #web_servers_available to get web servers available to use
16
+ * #current_web_server to get web server being currently used
17
+ * #web_servers_unused to get web server NOT being currently used
18
+ * Overloaded template filter method #exclude_template? to properly avoid rendering profile for web servers that are not currently used
19
+ * Added convenient methods, #tcp_socket? and #unix_socket?, to properly determine whether tcp or unix socket is being specified
20
+ * Rename #set_default_web_server_options to #set_web_server_options for better clarity
21
+ * Minor code cleanup
22
+
23
+
24
+
25
+ Bug fixes:
26
+ * Refactored #default_templates_path to fix an inheritance issue
27
+ * Corrected the process matching regular expressions
28
+
3
29
  ## Version 0.1.2 (Jul 14, 2016)
4
30
 
5
31
  New features:
@@ -31,10 +31,10 @@ module Luban
31
31
  include Parameters
32
32
 
33
33
  def default_templates_path
34
- @default_templates_path ||= super(__FILE__).join(web_server[:name].to_s)
34
+ @default_templates_path ||= base_templates_path(__FILE__).join(web_server[:name].to_s)
35
35
  end
36
36
 
37
- dispatch_task :phased_restart_process, to: :controller
37
+ application_action "phased_restart_process", dispatch_to: :controller
38
38
 
39
39
  protected
40
40
 
@@ -7,11 +7,15 @@ module Luban
7
7
  include Parameters
8
8
  include WebServer
9
9
 
10
+ def exclude_template?(template)
11
+ web_servers_unused.any? { |w| template =~ /^#{w}\./ }
12
+ end
13
+
10
14
  protected
11
15
 
12
16
  def init
13
17
  super
14
- set_default_web_server_options unless task.opts.release.nil?
18
+ set_web_server_options unless task.opts.release.nil?
15
19
  end
16
20
 
17
21
  def web_server_module(path)
@@ -3,7 +3,6 @@ module Luban
3
3
  module Applications
4
4
  class Rack
5
5
  class Controller < Luban::Deployment::Application::Controller
6
- include Luban::Deployment::Service::Controller::Cluster
7
6
  include Paths
8
7
  include Parameters
9
8
  include WebServer
@@ -35,7 +34,7 @@ module Luban
35
34
 
36
35
  def init
37
36
  super
38
- set_default_web_server_options
37
+ set_web_server_options
39
38
  end
40
39
 
41
40
  def restart_process!
@@ -4,31 +4,15 @@ module Luban
4
4
  class Rack
5
5
  module Paths
6
6
  def log_file_name
7
- @log_file_name ||= "#{web_server[:name]}.log"
7
+ @log_file_name ||= "#{current_web_server}.log"
8
8
  end
9
9
 
10
- def pid_file_path(n = nil)
11
- if n.nil?
12
- @pid_file_path ||= pids_path.join(pid_file_name)
13
- else
14
- pids_path.join(pid_file_name(n))
15
- end
16
- end
17
-
18
- def pid_file_name(n = nil)
19
- if n.nil?
20
- @pid_file_name ||= "#{web_server[:name]}.pid"
21
- else
22
- "#{web_server[:name]}.#{n + web_server[:opts][:port].to_i}.pid"
23
- end
24
- end
25
-
26
- def pid_file_pattern
27
- @pid_file_pattern ||= "#{web_server[:name]}.*.pid"
10
+ def pid_file_name
11
+ @pid_file_name ||= "#{current_web_server}.pid"
28
12
  end
29
13
 
30
14
  def control_file_name
31
- @control_file_name ||= "#{web_server[:name]}.#{control_file_extname}"
15
+ @control_file_name ||= "#{current_web_server}.#{control_file_extname}"
32
16
  end
33
17
 
34
18
  def control_file_extname
@@ -36,28 +20,23 @@ module Luban
36
20
  end
37
21
 
38
22
  def logrotate_file_name
39
- @logrotate_file_name ||= "#{web_server[:name]}.logrotate"
23
+ @logrotate_file_name ||= "#{current_web_server}.logrotate"
24
+ end
25
+
26
+ def socket_file_path
27
+ @socket_file_path ||= sockets_path.join(socket_file_name)
40
28
  end
41
29
 
42
30
  def sockets_path
43
31
  @sockets_path ||= shared_path.join('sockets')
44
32
  end
45
33
 
46
- def socket_file_path(n = nil)
47
- if n.nil?
48
- @socket_file_path ||= sockets_path.join(socket_file_name)
49
- else
50
- sockets_path.join(socket_file_name(n))
51
- end
34
+ def socket_file_name
35
+ @socket_file_name ||= "#{current_web_server}.sock"
52
36
  end
53
37
 
54
- def socket_file_name(n = nil)
55
- if n.nil?
56
- @socket_file_name ||= "#{web_server[:name]}.sock"
57
- else
58
- "#{web_server[:name]}.#{n}.sock"
59
- end
60
-
38
+ def public_files_path
39
+ @public_files_path ||= release_path.join('public')
61
40
  end
62
41
 
63
42
  def ruby_bin_path
@@ -0,0 +1,14 @@
1
+ # Logrotate configuration for Puma
2
+
3
+ <%= log_path.join('puma*.log') %> {
4
+ daily
5
+ missingok
6
+ rotate 14
7
+ compress
8
+ dateext
9
+ notifempty
10
+ sharedscripts
11
+ postrotate
12
+ [ ! -f <%= pid_file_path %> ] || kill -HUP $(cat <%= pid_file_path %>) 2>/dev/null || true
13
+ endscript
14
+ }
@@ -0,0 +1,17 @@
1
+ # Monit configuration for Puma
2
+
3
+ <% opts = web_server[:opts] -%>
4
+ check process <%= service_entry %>
5
+ with pidfile <%= pid_file_path %>
6
+ onreboot laststate
7
+ start program = "/bin/bash -c 'sleep 1; <%= start_command %>'"
8
+ stop program = "/bin/bash -c '<%= stop_command %>'"
9
+ if totalmem is greater than 150.0 MB for 40 cycles then alert
10
+ <%- if tcp_socket? -%>
11
+ if failed port <%= opts[:port] %> for 4 times within 8 cycles then restart
12
+ <%- end -%>
13
+ <%- if unix_socket? -%>
14
+ if failed unixsocket <%= socket_file_path %> for 4 times within 8 cycles then restart
15
+ <%- end -%>
16
+ if cpu is greater than 80% for 20 cycles then alert
17
+ if loadavg(5min) greater than 10 for 40 cycles then alert
@@ -0,0 +1,41 @@
1
+ # Nginx reverse proxy configuration for Puma
2
+
3
+ <% opts = web_server[:opts] -%>
4
+ upstream <%= service_entry %> {
5
+ # fail_timeout=0 means we always retry an upstream even if it failed
6
+ # to return a good HTTP response
7
+
8
+ <%- if tcp_socket? -%>
9
+ server <%= opts[:address] %>:<%= opts[:port] %> fail_timeout=0;
10
+ <%- end -%>
11
+ <%- if unix_socket? -%>
12
+ server unix:<%= socket_file_path %> fail_timeout=0;
13
+ <%- end -%>
14
+ }
15
+
16
+ server {
17
+ listen <%= port %>;
18
+ server_name <%= virtual_host %>;
19
+
20
+ # ~2 seconds is often enough for most cases to parse HTML/CSS and
21
+ # retrieve needed images/icons/frames, connections are cheap in
22
+ # nginx so increasing this is generally safe...
23
+ keepalive_timeout 5;
24
+
25
+ # path for static files
26
+ root <%= public_files_path %>;
27
+
28
+ location ~ ^/assets/ {
29
+ gzip_static on; # to serve pre-gizpped version
30
+ expires 1y;
31
+ add_header Cache-Control public;
32
+ add_header ETag "";
33
+ break;
34
+ }
35
+
36
+ try_files $uri/index.html $uri.html $uri @app;
37
+
38
+ location @app {
39
+ proxy_pass http://<%= service_entry %>;
40
+ }
41
+ }
@@ -0,0 +1,5 @@
1
+ # Puma configuration file
2
+
3
+ <% web_server[:opts].each_pair do |key, value| -%>
4
+ <%= key %> <%= value.is_a?(Array) ? parameterize(*value) : value.inspect %>
5
+ <% end %>
@@ -2,17 +2,17 @@
2
2
 
3
3
  <% opts = web_server[:opts] -%>
4
4
  <% opts[:servers].times do |n| -%>
5
- check process <%= service_entry %>.<%= web_server[:name] %>.<%= n %>
5
+ check process <%= service_entry %>.<%= current_web_server %>.<%= n %>
6
6
  with pidfile <%= pid_file_path(n) %>
7
7
  group <%= service_entry %>
8
8
  onreboot laststate
9
9
  start program = "/bin/bash -c 'sleep 1; <%= start_command %> -o <%=n %>'"
10
10
  stop program = "/bin/bash -c '<%= stop_command %> -o <%=n %>'"
11
11
  if totalmem is greater than 150.0 MB for 40 cycles then alert
12
- <%- if opts[:port] -%>
12
+ <%- if tcp_socket? -%>
13
13
  if failed port <%= opts[:port] + n %> for 4 times within 8 cycles then restart
14
14
  <%- end -%>
15
- <%- if opts[:socket] -%>
15
+ <%- if unix_socket? -%>
16
16
  if failed unixsocket <%= socket_file_path(n) %> for 4 times within 8 cycles then restart
17
17
  <%- end -%>
18
18
  if cpu is greater than 80% for 20 cycles then alert
@@ -5,12 +5,12 @@ upstream <%= service_entry %> {
5
5
  # fail_timeout=0 means we always retry an upstream even if it failed
6
6
  # to return a good HTTP response
7
7
 
8
- <%- if opts[:port] -%>
8
+ <%- if tcp_socket? -%>
9
9
  <%- opts[:servers].times do |n| -%>
10
10
  server <%= opts[:address] %>:<%= opts[:port] + n %> fail_timeout=0;
11
11
  <%- end -%>
12
12
  <%- end -%>
13
- <%- if opts[:socket] -%>
13
+ <%- if unix_socket? -%>
14
14
  <%- opts[:servers].times do |n| -%>
15
15
  server unix:<%= socket_file_path(n) %> fail_timeout=0;
16
16
  <%- end -%>
@@ -27,7 +27,7 @@ server {
27
27
  keepalive_timeout 5;
28
28
 
29
29
  # path for static files
30
- root <%= current_app_path %>/public;
30
+ root <%= public_files_path %>;
31
31
 
32
32
  location ~ ^/assets/ {
33
33
  gzip_static on; # to serve pre-gizpped version
@@ -1,3 +1,5 @@
1
+ # Thin configuration file
2
+
1
3
  ---
2
4
  <% web_server[:opts].each_pair do |key, value| -%>
3
5
  <%= key %>: <%= value.inspect %>
@@ -2,7 +2,7 @@ module Luban
2
2
  module Deployment
3
3
  module Applications
4
4
  class Rack
5
- VERSION = '0.1.2'
5
+ VERSION = '0.2.0'
6
6
  end
7
7
  end
8
8
  end
@@ -9,6 +9,16 @@ module Luban
9
9
  raise NotImplementedError, "#{self.class.name}##{__method__} is an abstract method."
10
10
  end
11
11
 
12
+ def web_servers_available
13
+ @web_servers ||= [:thin, :puma]
14
+ end
15
+
16
+ def web_servers_unused
17
+ @web_servers_unused ||= web_servers_available.select { |s| s != current_web_server }
18
+ end
19
+
20
+ def current_web_server; web_server[:name]; end
21
+
12
22
  protected
13
23
 
14
24
  def init
@@ -19,11 +29,11 @@ module Luban
19
29
  require web_server_require_path
20
30
  singleton_class.send(:prepend, web_server_module(web_server_require_path))
21
31
  rescue LoadError => e
22
- abort "Aborted! Failed to load web server #{web_server[:name].inspect}."
32
+ abort "Aborted! Failed to load web server #{current_web_server.inspect}."
23
33
  end
24
34
 
25
35
  def web_server_require_path
26
- @web_server_require_path ||= web_server_require_root.join(web_server[:name].to_s)
36
+ @web_server_require_path ||= web_server_require_root.join(current_web_server.to_s)
27
37
  end
28
38
 
29
39
  def web_server_require_root
@@ -34,7 +44,7 @@ module Luban
34
44
  @web_server_module ||= Object.const_get(path.to_s.camelcase, false)
35
45
  end
36
46
 
37
- def set_default_web_server_options
47
+ def set_web_server_options
38
48
  web_server[:opts] = default_web_server_options.merge(web_server[:opts])
39
49
  end
40
50
  end
@@ -0,0 +1,157 @@
1
+ module Luban
2
+ module Deployment
3
+ module Applications
4
+ class Rack
5
+ module WebServers
6
+ module Puma
7
+ module Common
8
+ def default_web_server_options
9
+ @default_web_server_options ||= {
10
+ # Server options
11
+ address: "0.0.0.0",
12
+ port: port,
13
+ socket: socket_file_path.to_s,
14
+ directory: release_path.to_s,
15
+ environment: stage,
16
+ # Daemon options
17
+ daemonize: true,
18
+ pidfile: pid_file_path.to_s,
19
+ state_path: state_file_path.to_s,
20
+ redirect_stdout: log_file_path.to_s,
21
+ redirect_stderr: error_log_file_path.to_s,
22
+ redirect_append: true,
23
+ quiet: false,
24
+ tag: "#{env_name}:#{release_tag}",
25
+ # Cluster options
26
+ servers: 2,
27
+ threads: "5:5",
28
+ preload: false,
29
+ prune_bundler: true,
30
+ # Control app options
31
+ control_socket: control_socket_file_path.to_s,
32
+ control_opts: { authen_tocken: port.to_s }
33
+ }
34
+ end
35
+
36
+ def tcp_socket?; @tcp_socket; end
37
+ def unix_socket?; @unix_socket; end
38
+
39
+ def state_file_path
40
+ @state_file_path ||= pids_path.join(state_file_name)
41
+ end
42
+
43
+ def state_file_name
44
+ @state_file_name ||= "#{current_web_server}.state"
45
+ end
46
+
47
+ def error_log_file_path
48
+ @error_log_file_path ||= log_path.join("#{current_web_server}_error.log")
49
+ end
50
+
51
+ def control_socket_file_path
52
+ @control_socket_file_path ||= sockets_path.join(control_socket_file_name)
53
+ end
54
+
55
+ def control_socket_file_name
56
+ @control_socket_file_name ||= "#{current_web_server}ctl.sock"
57
+ end
58
+
59
+ def puma_command
60
+ @puma_command ||= "#{bundle_executable} exec pumactl -F #{control_file_path}"
61
+ end
62
+
63
+ def start_command
64
+ @start_command ||= "cd #{release_path}; #{puma_command} start"
65
+ end
66
+
67
+ def stop_command
68
+ @stop_command ||= "cd #{release_path}; #{puma_command} stop"
69
+ end
70
+
71
+ def process_pattern
72
+ @process_pattern ||= "^puma .+\\[#{Regexp.escape(env_name)}:.*\\]"
73
+ end
74
+
75
+ def service_entry
76
+ @serivce_entry ||= "#{super}.#{current_web_server}"
77
+ end
78
+
79
+ protected
80
+
81
+ def set_web_server_options
82
+ super.tap do |opts|
83
+ [:uri, :stdout_redirect, :workers, :threads, :control, :tuning].each do |param|
84
+ send("set_#{param}_options", opts)
85
+ end
86
+ end
87
+ end
88
+
89
+ def set_uri_options(opts)
90
+ socket = opts.delete(:socket)
91
+ address = opts.delete(:address)
92
+ port = opts.delete(:port)
93
+ @unix_socket = !!opts.delete(:unix_socket)
94
+ @tcp_socket = !@unix_socket
95
+ if unix_socket?
96
+ opts[:bind] = "unix://#{socket}"
97
+ else
98
+ opts[:bind] = "tcp://#{address}:#{port}"
99
+ end
100
+ end
101
+
102
+ def set_stdout_redirect_options(opts)
103
+ redirect_stdout = opts.delete(:redirect_stdout)
104
+ redirect_stderr = opts.delete(:redirect_stderr)
105
+ redirect_append = opts.delete(:redirect_append)
106
+ opts[:stdout_redirect] = [ redirect_stdout, redirect_stderr, redirect_append ]
107
+ end
108
+
109
+ def set_workers_options(opts)
110
+ opts[:workers] = opts.delete(:servers)
111
+ end
112
+
113
+ def set_threads_options(opts)
114
+ if opts[:threads].is_a?(String)
115
+ opts[:threads] = opts[:threads].split(":").map(&:to_i)
116
+ end
117
+ end
118
+
119
+ def set_control_options(opts)
120
+ control_socket = opts.delete(:control_socket)
121
+ control_socket = "unix://#{control_socket}" unless control_socket == 'auto'
122
+ control_opts = opts.delete(:control_opts)
123
+ opts[:activate_control_app] = [ control_socket, control_opts ]
124
+ end
125
+
126
+ def set_tuning_options(opts)
127
+ if opts[:prune_bundler]
128
+ opts.delete(:preload)
129
+ elsif opts[:preload]
130
+ opts.delete(:prune_bundler)
131
+ opts[:preload_app!] = opts.delete(:preload)
132
+ else
133
+ opts.delete(:prune_bundler)
134
+ opts.delete(:preload)
135
+ end
136
+ end
137
+
138
+ def parameterize(*args)
139
+ args.map(&:inspect).join(", ")
140
+ end
141
+ end
142
+
143
+ include Common
144
+
145
+ def restart_command
146
+ @restart_command ||= "cd #{release_path}; #{puma_command} restart"
147
+ end
148
+
149
+ def phased_restart_command
150
+ @phased_restart_command ||= "cd #{release_path}; #{puma_command} phased-restart"
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
@@ -4,7 +4,87 @@ module Luban
4
4
  class Rack
5
5
  module WebServers
6
6
  module Thin
7
+ module Cluster
8
+ def pid_file_pattern
9
+ @pid_file_pattern ||= "#{current_web_server}.*.pid"
10
+ end
11
+
12
+ def pid_files_path
13
+ pids_path.join(pid_file_pattern)
14
+ end
15
+
16
+ def pid_files
17
+ capture(:ls, "-A #{pid_files_path} 2>/dev/null").split.map do |f|
18
+ Pathname.new(f)
19
+ end
20
+ end
21
+
22
+ def pids
23
+ pid_files.collect { |pid_file| capture(:cat, "#{pid_file} 2>/dev/null") }
24
+ end
25
+
26
+ def pid; pids; end
27
+
28
+ def pid_file_exists?
29
+ # Any pid file is NOT zero size
30
+ pid_files.any? { |pid_file| file?(pid_file, "-s") }
31
+ end
32
+
33
+ def remove_orphaned_pid_file
34
+ rm(pid_files_path) if pid_file_orphaned?
35
+ end
36
+
37
+ def monitor_command
38
+ @monitor_command ||= "#{monitor_executable} monitor -g #{service_entry}"
39
+ end
40
+
41
+ def unmonitor_command
42
+ @unmonitor_command ||= "#{monitor_executable} unmonitor -g #{service_entry}"
43
+ end
44
+ end
45
+
46
+ module Paths
47
+ def pid_file_path(n = nil)
48
+ if n.nil?
49
+ @pid_file_path ||= pids_path.join(pid_file_name)
50
+ else
51
+ pids_path.join(pid_file_name(n))
52
+ end
53
+ end
54
+
55
+ def pid_file_name(n = nil)
56
+ if n.nil?
57
+ @pid_file_name ||= "#{current_web_server}.pid"
58
+ else
59
+ "#{current_web_server}.#{n + web_server[:opts][:port].to_i}.pid"
60
+ end
61
+ end
62
+
63
+ def control_file_extname
64
+ @control_file_extname ||= "yml"
65
+ end
66
+
67
+ def socket_file_path(n = nil)
68
+ if n.nil?
69
+ @socket_file_path ||= sockets_path.join(socket_file_name)
70
+ else
71
+ sockets_path.join(socket_file_name(n))
72
+ end
73
+ end
74
+
75
+ def socket_file_name(n = nil)
76
+ if n.nil?
77
+ @socket_file_name ||= "#{current_web_server}.sock"
78
+ else
79
+ "#{current_web_server}.#{n}.sock"
80
+ end
81
+ end
82
+ end
83
+
7
84
  module Common
85
+ include Cluster
86
+ include Paths
87
+
8
88
  def default_web_server_options
9
89
  @default_web_server_options ||= {
10
90
  # Server options
@@ -12,7 +92,6 @@ module Luban
12
92
  port: port + 1,
13
93
  socket: socket_file_path.to_s,
14
94
  chdir: release_path.to_s,
15
- # Adapter options
16
95
  environment: stage,
17
96
  # Daemon options
18
97
  daemonize: true,
@@ -20,7 +99,7 @@ module Luban
20
99
  pid: pid_file_path.to_s,
21
100
  tag: "#{env_name}:#{release_tag}",
22
101
  # Cluster options
23
- servers: 4,
102
+ servers: 2,
24
103
  wait: 30,
25
104
  # Tuning options
26
105
  timeout: 30,
@@ -31,9 +110,8 @@ module Luban
31
110
  }
32
111
  end
33
112
 
34
- def control_file_extname
35
- @control_file_extname ||= "yml"
36
- end
113
+ def tcp_socket?; @tcp_socket; end
114
+ def unix_socket?; @unix_socket; end
37
115
 
38
116
  def thin_command
39
117
  @thin_command ||= "#{bundle_executable} exec thin -C #{control_file_path}"
@@ -48,14 +126,16 @@ module Luban
48
126
  end
49
127
 
50
128
  def process_pattern
51
- @process_pattern ||= "^thin server.+\\[#{Regexp.escape(env_name)}:#{Regexp.escape(application_version)}-[0-9a-f]+\\]"
129
+ @process_pattern ||= "^thin server.+\\[#{Regexp.escape(env_name)}:.*\\]"
52
130
  end
53
131
 
54
132
  protected
55
133
 
56
- def set_default_web_server_options
134
+ def set_web_server_options
57
135
  super.tap do |opts|
58
- if opts.delete(:unix_socket)
136
+ @unix_socket = !!opts.delete(:unix_socket)
137
+ @tcp_socket = !@unix_socket
138
+ if unix_socket?
59
139
  opts.delete(:address)
60
140
  opts.delete(:port)
61
141
  else
@@ -64,7 +144,7 @@ module Luban
64
144
  end
65
145
  end
66
146
  end
67
-
147
+
68
148
  include Common
69
149
 
70
150
  def restart_command
data/luban-rack.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ["lib"]
21
21
 
22
22
  spec.required_ruby_version = ">= 2.1.0"
23
- spec.add_dependency 'luban'
23
+ spec.add_dependency 'luban', ">= 0.6.7"
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 1.12"
26
26
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: luban-rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rubyist Chi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-14 00:00:00.000000000 Z
11
+ date: 2016-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: luban
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.6.7
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.6.7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -88,12 +88,17 @@ files:
88
88
  - lib/luban/deployment/applications/rack/configurator.rb
89
89
  - lib/luban/deployment/applications/rack/controller.rb
90
90
  - lib/luban/deployment/applications/rack/paths.rb
91
- - lib/luban/deployment/applications/rack/templates/thin/nginx.http.proxy.conf.erb
91
+ - lib/luban/deployment/applications/rack/templates/puma/puma.logrotate.erb
92
+ - lib/luban/deployment/applications/rack/templates/puma/puma.monitrc.erb
93
+ - lib/luban/deployment/applications/rack/templates/puma/puma.nginx.http.proxy.conf.erb
94
+ - lib/luban/deployment/applications/rack/templates/puma/puma.rb.erb
92
95
  - lib/luban/deployment/applications/rack/templates/thin/thin.logrotate.erb
93
96
  - lib/luban/deployment/applications/rack/templates/thin/thin.monitrc.erb
97
+ - lib/luban/deployment/applications/rack/templates/thin/thin.nginx.http.proxy.conf.erb
94
98
  - lib/luban/deployment/applications/rack/templates/thin/thin.yml.erb
95
99
  - lib/luban/deployment/applications/rack/version.rb
96
100
  - lib/luban/deployment/applications/rack/web_server.rb
101
+ - lib/luban/deployment/applications/rack/web_servers/puma.rb
97
102
  - lib/luban/deployment/applications/rack/web_servers/thin.rb
98
103
  - lib/luban/rack.rb
99
104
  - luban-rack.gemspec