nginxtra 1.8.0.11 → 1.8.1.12
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 +4 -4
- data/bin/nginxtra +1 -1
- data/bin/nginxtra_rails +1 -1
- data/lib/nginxtra/action.rb +9 -6
- data/lib/nginxtra/actions/convert.rb +12 -11
- data/lib/nginxtra/actions/install.rb +9 -7
- data/lib/nginxtra/actions/rails/server.rb +12 -14
- data/lib/nginxtra/actions/start.rb +2 -2
- data/lib/nginxtra/cli.rb +17 -18
- data/lib/nginxtra/config.rb +80 -79
- data/lib/nginxtra/config_converter.rb +45 -37
- data/lib/nginxtra/error.rb +91 -11
- data/lib/nginxtra/rails/cli.rb +4 -4
- data/lib/nginxtra/status.rb +13 -10
- data/lib/nginxtra/version.rb +2 -2
- data/templates/partials/nginx.conf/rails.rb +5 -5
- data/vendor/nginx/CHANGES +47 -0
- data/vendor/nginx/CHANGES.ru +52 -0
- data/vendor/nginx/src/core/nginx.h +2 -2
- data/vendor/nginx/src/core/ngx_parse.c +1 -1
- data/vendor/nginx/src/core/ngx_resolver.c +133 -99
- data/vendor/nginx/src/core/ngx_resolver.h +8 -7
- data/vendor/nginx/src/event/modules/ngx_epoll_module.c +1 -1
- data/vendor/nginx/src/event/ngx_event_openssl.c +7 -12
- data/vendor/nginx/src/event/ngx_event_openssl.h +1 -0
- data/vendor/nginx/src/http/ngx_http.c +4 -1
- data/vendor/nginx/src/http/ngx_http_core_module.c +7 -3
- data/vendor/nginx/src/http/ngx_http_request.c +16 -8
- data/vendor/nginx/src/http/ngx_http_upstream.c +14 -11
- metadata +61 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 99f107b601dfcabd1f825d8f14aad06edd048f55
|
|
4
|
+
data.tar.gz: 824ea02e092be12cf8f22f39a1cf21a867494034
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e67268dddd754316d87fab9a51a2ce94884fbe801ffa4e95ffd4784ca86db5548428219682b0f8e79936dddd1ffcef803cc8acfff0d551f6582a5dc235076408
|
|
7
|
+
data.tar.gz: 124f0029c2f3fbac24f1882e9c894c804ea4a808f98c44b3450aeba39a398f02c1fcb831e6298a74b758424fd32f4409b0373fb5dafd746db777b27b953ceb48
|
data/bin/nginxtra
CHANGED
data/bin/nginxtra_rails
CHANGED
data/lib/nginxtra/action.rb
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
module Nginxtra
|
|
2
2
|
module Action
|
|
3
|
-
@@ignore_force = false
|
|
4
|
-
|
|
5
3
|
def initialize(thor, config)
|
|
6
4
|
@thor = thor
|
|
7
5
|
@config = config
|
|
@@ -14,20 +12,21 @@ module Nginxtra
|
|
|
14
12
|
end
|
|
15
13
|
|
|
16
14
|
private
|
|
15
|
+
|
|
17
16
|
def run!(command)
|
|
18
17
|
@thor.run command
|
|
19
|
-
raise Nginxtra::Error::RunFailed
|
|
18
|
+
raise Nginxtra::Error::RunFailed, "The last run command failed" unless $?.success? # rubocop:disable Style/SpecialGlobalVars
|
|
20
19
|
end
|
|
21
20
|
|
|
22
21
|
def without_force
|
|
23
|
-
|
|
22
|
+
Nginxtra::Action.ignore_force = true
|
|
24
23
|
yield
|
|
25
24
|
ensure
|
|
26
|
-
|
|
25
|
+
Nginxtra::Action.ignore_force = false
|
|
27
26
|
end
|
|
28
27
|
|
|
29
28
|
def force?
|
|
30
|
-
return false if
|
|
29
|
+
return false if Nginxtra::Action.ignore_force
|
|
31
30
|
@thor.options["force"]
|
|
32
31
|
end
|
|
33
32
|
|
|
@@ -42,5 +41,9 @@ module Nginxtra
|
|
|
42
41
|
def sudo(force = false)
|
|
43
42
|
"sudo " if (force || (@config && @config.require_root?)) && Process.uid != 0
|
|
44
43
|
end
|
|
44
|
+
|
|
45
|
+
class << self
|
|
46
|
+
attr_accessor :ignore_force
|
|
47
|
+
end
|
|
45
48
|
end
|
|
46
49
|
end
|
|
@@ -8,13 +8,14 @@ module Nginxtra
|
|
|
8
8
|
def convert
|
|
9
9
|
@streams_to_close = []
|
|
10
10
|
converter = Nginxtra::ConfigConverter.new output
|
|
11
|
-
converter.convert :
|
|
11
|
+
converter.convert config: config, binary_status: binary_status
|
|
12
12
|
save_if_necessary!
|
|
13
13
|
ensure
|
|
14
14
|
close_streams!
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
private
|
|
18
|
+
|
|
18
19
|
def output
|
|
19
20
|
if @thor.options["output"]
|
|
20
21
|
STDOUT
|
|
@@ -43,24 +44,24 @@ module Nginxtra
|
|
|
43
44
|
def binary_status
|
|
44
45
|
return if @thor.options["ignore-nginx-bin"]
|
|
45
46
|
|
|
46
|
-
if @thor.options["nginx-bin"]
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
binary = if @thor.options["nginx-bin"]
|
|
48
|
+
@thor.options["nginx-bin"]
|
|
49
|
+
else
|
|
50
|
+
etc_nginx_binary
|
|
51
|
+
end
|
|
51
52
|
|
|
52
|
-
@thor.run "#{binary} -V 2>&1", :
|
|
53
|
+
@thor.run "#{binary} -V 2>&1", capture: true
|
|
53
54
|
end
|
|
54
55
|
|
|
55
56
|
def etc_nginx_binary
|
|
56
|
-
raise Nginxtra::Error::
|
|
57
|
+
raise Nginxtra::Error::NginxInitScriptMissing unless File.exist? "/etc/init.d/nginx"
|
|
57
58
|
binary = File.read("/etc/init.d/nginx")[/\s*DAEMON\s*=\s*(.*?)\s*$/, 1]
|
|
58
|
-
raise Nginxtra::Error::
|
|
59
|
+
raise Nginxtra::Error::UndeterminedNginxBinary unless binary
|
|
59
60
|
binary
|
|
60
61
|
end
|
|
61
62
|
|
|
62
63
|
def open_file(path)
|
|
63
|
-
raise Nginxtra::Error::ConvertFailed
|
|
64
|
+
raise Nginxtra::Error::ConvertFailed, "Missing config file #{path}" unless File.exist? path
|
|
64
65
|
|
|
65
66
|
File.open(path, "r").tap do |stream|
|
|
66
67
|
@streams_to_close << stream
|
|
@@ -68,7 +69,7 @@ module Nginxtra
|
|
|
68
69
|
end
|
|
69
70
|
|
|
70
71
|
def close_streams!
|
|
71
|
-
@streams_to_close.each
|
|
72
|
+
@streams_to_close.each(&:close)
|
|
72
73
|
end
|
|
73
74
|
end
|
|
74
75
|
end
|
|
@@ -17,25 +17,26 @@ module Nginxtra
|
|
|
17
17
|
# Look for nginx installation and fail if it exists (unless
|
|
18
18
|
# --ignore-nginx-check is passed).
|
|
19
19
|
def check_if_nginx_is_installed
|
|
20
|
-
return unless File.
|
|
20
|
+
return unless File.exist?("/etc/init.d/nginx")
|
|
21
21
|
|
|
22
22
|
if @thor.options["ignore-nginx-check"]
|
|
23
23
|
@thor.say @thor.set_color("Detected nginx install, but ignoring!", :red, true)
|
|
24
24
|
return
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
raise Nginxtra::Error::NginxDetected
|
|
27
|
+
raise Nginxtra::Error::NginxDetected
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
# Create a script in the base directory which be symlinked to
|
|
31
31
|
# /etc/init.d/nginxtra and then used to start and stop nginxtra
|
|
32
32
|
# via update-rc.d.
|
|
33
|
+
# rubocop:disable Metrics/AbcSize, Metrics/LineLength
|
|
33
34
|
def create_etc_script
|
|
34
35
|
filename = "etc.init.d.nginxtra"
|
|
35
36
|
workingdir = File.expand_path "."
|
|
36
37
|
|
|
37
38
|
@thor.inside Nginxtra::Config.base_dir do
|
|
38
|
-
@thor.create_file filename, %
|
|
39
|
+
@thor.create_file filename, %(#!/bin/sh
|
|
39
40
|
|
|
40
41
|
### BEGIN INIT INFO
|
|
41
42
|
# Provides: nginxtra
|
|
@@ -50,14 +51,15 @@ module Nginxtra
|
|
|
50
51
|
export GEM_HOME="#{ENV["GEM_HOME"]}"
|
|
51
52
|
export GEM_PATH="#{ENV["GEM_PATH"]}"
|
|
52
53
|
#{Nginxtra::Config.ruby_path} "#{File.join Nginxtra::Config.gem_dir, "bin/nginxtra"}" "$1" --basedir="#{Nginxtra::Config.base_dir}" --config="#{Nginxtra::Config.loaded_config_path}" --workingdir="#{workingdir}" --non-interactive
|
|
53
|
-
|
|
54
|
+
), force: true
|
|
54
55
|
@thor.chmod filename, 0755
|
|
55
56
|
end
|
|
56
57
|
|
|
57
|
-
run! %
|
|
58
|
-
run! %
|
|
59
|
-
run! %
|
|
58
|
+
run! %(#{sudo true}rm /etc/init.d/nginxtra) if File.exist? "/etc/init.d/nginxtra"
|
|
59
|
+
run! %(#{sudo true}ln -s "#{File.join Nginxtra::Config.base_dir, filename}" /etc/init.d/nginxtra)
|
|
60
|
+
run! %(#{sudo true}update-rc.d nginxtra defaults)
|
|
60
61
|
end
|
|
62
|
+
# rubocop:enable Metrics/AbcSize, Metrics/LineLength
|
|
61
63
|
|
|
62
64
|
# Notify the user that installation should be up to date.
|
|
63
65
|
def up_to_date
|
|
@@ -19,15 +19,11 @@ module Nginxtra
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def ensure_in_rails_app
|
|
22
|
-
unless in_rails_app?
|
|
23
|
-
raise Nginxtra::Error::IllegalState.new "You must be in a rails root directory to run nginxtra_rails."
|
|
24
|
-
end
|
|
22
|
+
raise Nginxtra::Error::IllegalState, "You must be in a rails root directory to run nginxtra_rails." unless in_rails_app?
|
|
25
23
|
end
|
|
26
24
|
|
|
27
25
|
def ensure_server_gem_installed
|
|
28
|
-
unless passenger_installed?
|
|
29
|
-
raise Nginxtra::Error::IllegalState.new "Please 'gem install passenger' to continue."
|
|
30
|
-
end
|
|
26
|
+
raise Nginxtra::Error::IllegalState, "Please 'gem install passenger' to continue." unless passenger_installed?
|
|
31
27
|
end
|
|
32
28
|
|
|
33
29
|
def start_nginxtra
|
|
@@ -35,10 +31,10 @@ module Nginxtra
|
|
|
35
31
|
environment = @thor.options["environment"]
|
|
36
32
|
@thor.empty_directory "tmp" unless File.directory? "tmp"
|
|
37
33
|
@thor.empty_directory "tmp/nginxtra" unless File.directory? "tmp/nginxtra"
|
|
38
|
-
@thor.create_file config_path, %
|
|
39
|
-
rails :
|
|
34
|
+
@thor.create_file config_path, %(nginxtra.simple_config do
|
|
35
|
+
rails port: #{port}, environment: "#{environment}"
|
|
40
36
|
end
|
|
41
|
-
|
|
37
|
+
), force: true
|
|
42
38
|
@thor.invoke Nginxtra::CLI, ["start"], :basedir => basedir, :config => config_path, :workingdir => workingdir, :"non-interactive" => true
|
|
43
39
|
@thor.say "Listening on http://localhost:#{port}/"
|
|
44
40
|
@thor.say "Environment: #{environment}"
|
|
@@ -73,8 +69,8 @@ end
|
|
|
73
69
|
end
|
|
74
70
|
|
|
75
71
|
def in_rails_app?
|
|
76
|
-
return true if File.
|
|
77
|
-
File.
|
|
72
|
+
return true if File.exist? "script/rails"
|
|
73
|
+
File.exist?("script/server") && File.exist?("app")
|
|
78
74
|
end
|
|
79
75
|
|
|
80
76
|
def start_verbose_output
|
|
@@ -88,16 +84,17 @@ end
|
|
|
88
84
|
@verbose_run = false
|
|
89
85
|
end
|
|
90
86
|
|
|
87
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
|
91
88
|
def verbose_thread
|
|
92
89
|
environment = @thor.options["environment"]
|
|
93
90
|
log_path = "log/#{environment}.log"
|
|
94
91
|
|
|
95
|
-
if File.
|
|
92
|
+
if File.exist? log_path
|
|
96
93
|
log = File.open log_path, "r"
|
|
97
94
|
log.seek 0, IO::SEEK_END
|
|
98
95
|
else
|
|
99
96
|
while @verbose_run
|
|
100
|
-
if File.
|
|
97
|
+
if File.exist? log_path
|
|
101
98
|
log = File.open log_path, "r"
|
|
102
99
|
break
|
|
103
100
|
end
|
|
@@ -112,7 +109,7 @@ end
|
|
|
112
109
|
|
|
113
110
|
if line
|
|
114
111
|
puts line
|
|
115
|
-
puts line while(line = log.gets)
|
|
112
|
+
puts line while (line = log.gets)
|
|
116
113
|
end
|
|
117
114
|
|
|
118
115
|
sleep 0.1
|
|
@@ -120,6 +117,7 @@ end
|
|
|
120
117
|
ensure
|
|
121
118
|
log.close if log
|
|
122
119
|
end
|
|
120
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
|
123
121
|
end
|
|
124
122
|
end
|
|
125
123
|
end
|
|
@@ -28,11 +28,11 @@ module Nginxtra
|
|
|
28
28
|
# Save nginx config files to the proper config file path.
|
|
29
29
|
def save_config_files
|
|
30
30
|
files = @config.files
|
|
31
|
-
raise Nginxtra::Error::
|
|
31
|
+
raise Nginxtra::Error::MissingNginxConfig unless files.include? "nginx.conf"
|
|
32
32
|
|
|
33
33
|
@thor.inside Nginxtra::Config.config_dir do
|
|
34
34
|
files.each do |filename|
|
|
35
|
-
@thor.create_file filename, @config.file_contents(filename), :
|
|
35
|
+
@thor.create_file filename, @config.file_contents(filename), force: true
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
end
|
data/lib/nginxtra/cli.rb
CHANGED
|
@@ -4,13 +4,13 @@ module Nginxtra
|
|
|
4
4
|
class CLI < Thor
|
|
5
5
|
include Thor::Actions
|
|
6
6
|
|
|
7
|
-
class_option "force", :
|
|
8
|
-
class_option "trace", :
|
|
9
|
-
class_option "non-interactive", :
|
|
10
|
-
class_option "ignore-nginx-check", :
|
|
11
|
-
class_option "config", :
|
|
12
|
-
class_option "basedir", :
|
|
13
|
-
class_option "workingdir", :
|
|
7
|
+
class_option "force", type: :boolean, banner: "Force a task to happen, regardless of what nginxtra thinks", aliases: "-f"
|
|
8
|
+
class_option "trace", type: :boolean, banner: "Output stack traces on error"
|
|
9
|
+
class_option "non-interactive", type: :boolean, banner: "If nginxtra would ask a question, it instead proceeds as if 'no' were the answer", aliases: "-I"
|
|
10
|
+
class_option "ignore-nginx-check", type: :boolean, banner: "Ignore the nginx check if installing"
|
|
11
|
+
class_option "config", type: :string, banner: "Specify the configuration file to use", aliases: "-c"
|
|
12
|
+
class_option "basedir", type: :string, banner: "Specify the directory to store nginx files", aliases: "-b"
|
|
13
|
+
class_option "workingdir", type: :string, banner: "Specify the working directory", aliases: "-w"
|
|
14
14
|
|
|
15
15
|
map "-v" => "version"
|
|
16
16
|
|
|
@@ -25,11 +25,11 @@ module Nginxtra
|
|
|
25
25
|
options to be ignored (and the defaults will be used in the resulting
|
|
26
26
|
nginxtra.conf.rb). The result will be output to nginxtra.conf.rb in the current
|
|
27
27
|
directory, unless an override value is specified with the --config option."
|
|
28
|
-
method_option "nginx-bin", :
|
|
29
|
-
method_option "nginx-conf", :
|
|
30
|
-
method_option "ignore-nginx-bin", :
|
|
31
|
-
method_option "output", :
|
|
32
|
-
method_option "input", :
|
|
28
|
+
method_option "nginx-bin", type: :string, banner: "Point to the compiled nginx to retrieve compile options", aliases: "-n"
|
|
29
|
+
method_option "nginx-conf", type: :string, banner: "Point to the nginx.conf file to retrieve the existing configuration", aliases: "-F", default: "nginx.conf"
|
|
30
|
+
method_option "ignore-nginx-bin", type: :boolean, banner: "Ignore the nginx binary, and assume default compile time options", aliases: "-N"
|
|
31
|
+
method_option "output", type: :boolean, banner: "Output to standard out instead of to a file", aliases: "-o"
|
|
32
|
+
method_option "input", type: :boolean, banner: "Read nginx.conf from standard in instead of a file", aliases: "-i"
|
|
33
33
|
def convert
|
|
34
34
|
Nginxtra::Error.protect self do
|
|
35
35
|
Nginxtra::Actions::Convert.new(self, nil).convert
|
|
@@ -42,9 +42,9 @@ module Nginxtra
|
|
|
42
42
|
--file is provided, something other than nginx.conf can be output. The --list
|
|
43
43
|
option can be provided to list known config files. The --compile-options option
|
|
44
44
|
can be provided to list compile time options being passed to nginx."
|
|
45
|
-
method_option "compile-options", :
|
|
46
|
-
method_option "file", :
|
|
47
|
-
method_option "list", :
|
|
45
|
+
method_option "compile-options", type: :boolean, banner: "Show compile options being used", aliases: "-C"
|
|
46
|
+
method_option "file", type: :string, banner: "The config file that is printed", aliases: "-F", default: "nginx.conf"
|
|
47
|
+
method_option "list", type: :boolean, banner: "List known files", aliases: "-l"
|
|
48
48
|
def print
|
|
49
49
|
Nginxtra::Error.protect self do
|
|
50
50
|
set_working_dir!
|
|
@@ -141,6 +141,7 @@ module Nginxtra
|
|
|
141
141
|
end
|
|
142
142
|
|
|
143
143
|
private
|
|
144
|
+
|
|
144
145
|
def prepare_config!
|
|
145
146
|
Nginxtra::Config.base_dir = options["basedir"]
|
|
146
147
|
result = Nginxtra::Config.require! options["config"]
|
|
@@ -149,9 +150,7 @@ module Nginxtra
|
|
|
149
150
|
end
|
|
150
151
|
|
|
151
152
|
def set_working_dir!
|
|
152
|
-
if options["workingdir"]
|
|
153
|
-
Dir.chdir options["workingdir"]
|
|
154
|
-
end
|
|
153
|
+
Dir.chdir options["workingdir"] if options["workingdir"]
|
|
155
154
|
end
|
|
156
155
|
|
|
157
156
|
class << self
|
data/lib/nginxtra/config.rb
CHANGED
|
@@ -6,19 +6,16 @@ module Nginxtra
|
|
|
6
6
|
FILENAME = "nginxtra.conf.rb".freeze
|
|
7
7
|
NGINX_CONF_FILENAME = "nginx.conf".freeze
|
|
8
8
|
NGINX_PIDFILE_FILENAME = ".nginx_pid".freeze
|
|
9
|
-
@@last_config = nil
|
|
10
9
|
|
|
11
|
-
def initialize(*
|
|
10
|
+
def initialize(*_args)
|
|
12
11
|
@requires_root = false
|
|
13
12
|
@compile_options = []
|
|
14
13
|
@partial_paths = []
|
|
15
14
|
@file_paths = []
|
|
16
15
|
@files = {}
|
|
17
|
-
|
|
16
|
+
Nginxtra::Config.last_config = self
|
|
18
17
|
|
|
19
|
-
if block_given?
|
|
20
|
-
yield self
|
|
21
|
-
end
|
|
18
|
+
yield self if block_given?
|
|
22
19
|
end
|
|
23
20
|
|
|
24
21
|
# Define an additional directory where partials can be found. The
|
|
@@ -50,7 +47,7 @@ module Nginxtra
|
|
|
50
47
|
# gem partials.
|
|
51
48
|
def partial_paths
|
|
52
49
|
[].tap do |result|
|
|
53
|
-
result.push
|
|
50
|
+
result.push(*@partial_paths)
|
|
54
51
|
result.push File.join(Nginxtra::Config.template_dir, "partials")
|
|
55
52
|
result.push File.join(Nginxtra::Config.gem_template_dir, "partials")
|
|
56
53
|
end
|
|
@@ -63,7 +60,7 @@ module Nginxtra
|
|
|
63
60
|
# file templates.
|
|
64
61
|
def file_paths
|
|
65
62
|
[].tap do |result|
|
|
66
|
-
result.push
|
|
63
|
+
result.push(*@file_paths)
|
|
67
64
|
result.push File.join(Nginxtra::Config.template_dir, "files")
|
|
68
65
|
result.push File.join(Nginxtra::Config.gem_template_dir, "files")
|
|
69
66
|
end
|
|
@@ -75,7 +72,7 @@ module Nginxtra
|
|
|
75
72
|
# ...
|
|
76
73
|
# end
|
|
77
74
|
def config(&block)
|
|
78
|
-
instance_eval
|
|
75
|
+
instance_eval(&block)
|
|
79
76
|
self
|
|
80
77
|
end
|
|
81
78
|
|
|
@@ -106,9 +103,9 @@ module Nginxtra
|
|
|
106
103
|
# add a Wno-error compilation option, and add the passenger module
|
|
107
104
|
# to the proper passenger path.
|
|
108
105
|
def require_passenger!
|
|
109
|
-
compile_option %
|
|
110
|
-
compile_option %
|
|
111
|
-
compile_option %
|
|
106
|
+
compile_option %(--with-http_gzip_static_module)
|
|
107
|
+
compile_option %(--with-cc-opt=-Wno-error)
|
|
108
|
+
compile_option %(--add-module="#{Nginxtra::Config.passenger_config_dir}")
|
|
112
109
|
end
|
|
113
110
|
|
|
114
111
|
# Obtain the compile options that have been configured.
|
|
@@ -130,10 +127,10 @@ module Nginxtra
|
|
|
130
127
|
# end
|
|
131
128
|
def compile_option(opt)
|
|
132
129
|
opt = "--#{opt}" unless opt =~ /^--/
|
|
133
|
-
raise Nginxtra::Error::
|
|
134
|
-
raise Nginxtra::Error::
|
|
135
|
-
raise Nginxtra::Error::
|
|
136
|
-
raise Nginxtra::Error::
|
|
130
|
+
raise Nginxtra::Error::InvalidCompilationOption, "prefix" if opt =~ /--prefix=/
|
|
131
|
+
raise Nginxtra::Error::InvalidCompilationOption, "sbin-path" if opt =~ /--sbin-path=/
|
|
132
|
+
raise Nginxtra::Error::InvalidCompilationOption, "conf-path" if opt =~ /--conf-path=/
|
|
133
|
+
raise Nginxtra::Error::InvalidCompilationOption, "pid-path" if opt =~ /--pid-path=/
|
|
137
134
|
@compile_options << opt
|
|
138
135
|
end
|
|
139
136
|
|
|
@@ -155,10 +152,7 @@ module Nginxtra
|
|
|
155
152
|
end
|
|
156
153
|
|
|
157
154
|
class << self
|
|
158
|
-
|
|
159
|
-
def last_config
|
|
160
|
-
@@last_config
|
|
161
|
-
end
|
|
155
|
+
attr_accessor :last_config
|
|
162
156
|
|
|
163
157
|
# Obtain the config file path based on the current directory.
|
|
164
158
|
# This will be the path to the first nginxtra.conf.rb found
|
|
@@ -169,41 +163,40 @@ module Nginxtra
|
|
|
169
163
|
def path
|
|
170
164
|
path = File.absolute_path "."
|
|
171
165
|
config = File.join path, FILENAME
|
|
172
|
-
return config if File.
|
|
166
|
+
return config if File.exist? config
|
|
173
167
|
config = File.join path, "config", FILENAME
|
|
174
|
-
return config if File.
|
|
168
|
+
return config if File.exist? config
|
|
175
169
|
path = File.dirname path
|
|
176
170
|
|
|
177
|
-
|
|
171
|
+
loop do
|
|
178
172
|
config = File.join path, FILENAME
|
|
179
|
-
return config if File.
|
|
173
|
+
return config if File.exist? config
|
|
180
174
|
path = File.dirname path
|
|
181
|
-
|
|
175
|
+
break if path == "/"
|
|
176
|
+
end
|
|
182
177
|
|
|
183
178
|
config = File.join path, FILENAME
|
|
184
|
-
config if File.
|
|
179
|
+
config if File.exist? config
|
|
185
180
|
end
|
|
186
181
|
|
|
187
182
|
# Retrieve the path to the config file that was loaded.
|
|
188
|
-
|
|
189
|
-
@loaded_config_path
|
|
190
|
-
end
|
|
183
|
+
attr_reader :loaded_config_path
|
|
191
184
|
|
|
192
185
|
# Determine where the config file is and require it. Return the
|
|
193
186
|
# resulting config loaded by the path.
|
|
194
187
|
# Nginxtra::Error::MissingConfig will be raised if the config
|
|
195
188
|
# file cannot be found.
|
|
196
189
|
def require!(config_path = nil)
|
|
197
|
-
if config_path
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
raise Nginxtra::Error::MissingConfig
|
|
204
|
-
raise Nginxtra::Error::MissingConfig
|
|
190
|
+
config_path = if config_path
|
|
191
|
+
File.absolute_path config_path
|
|
192
|
+
else
|
|
193
|
+
path
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
raise Nginxtra::Error::MissingConfig, "Cannot find #{FILENAME} to configure nginxtra!" unless config_path
|
|
197
|
+
raise Nginxtra::Error::MissingConfig, "Missing file #{config_path} to configure nginxtra!" unless File.exist?(config_path)
|
|
205
198
|
require config_path
|
|
206
|
-
raise Nginxtra::Error::
|
|
199
|
+
raise Nginxtra::Error::NoConfigSpecified, config_path unless last_config
|
|
207
200
|
@loaded_config_path = config_path
|
|
208
201
|
last_config
|
|
209
202
|
end
|
|
@@ -298,7 +291,7 @@ module Nginxtra
|
|
|
298
291
|
# be found.
|
|
299
292
|
def passenger_spec
|
|
300
293
|
@passenger_spec ||= Gem::Specification.find_by_name("passenger").tap do |spec|
|
|
301
|
-
raise
|
|
294
|
+
raise Nginxtra::Error::MissingPassengerGem if spec.nil?
|
|
302
295
|
end
|
|
303
296
|
end
|
|
304
297
|
|
|
@@ -308,7 +301,7 @@ module Nginxtra
|
|
|
308
301
|
|
|
309
302
|
# Determine if nginx is running, based on the pidfile.
|
|
310
303
|
def nginx_running?
|
|
311
|
-
return false unless File.
|
|
304
|
+
return false unless File.exist? nginx_pidfile
|
|
312
305
|
pid = File.read(nginx_pidfile).strip
|
|
313
306
|
Process.getpgid pid.to_i
|
|
314
307
|
true
|
|
@@ -372,9 +365,9 @@ module Nginxtra
|
|
|
372
365
|
def initialize(filename, config, &block)
|
|
373
366
|
@filename = filename
|
|
374
367
|
@config = config
|
|
375
|
-
@indentation = Nginxtra::Config::Indentation.new :
|
|
368
|
+
@indentation = Nginxtra::Config::Indentation.new indent_size: 4
|
|
376
369
|
@file_contents = []
|
|
377
|
-
instance_eval
|
|
370
|
+
instance_eval(&block)
|
|
378
371
|
end
|
|
379
372
|
|
|
380
373
|
# The file contents that were defined for this config file.
|
|
@@ -435,9 +428,9 @@ module Nginxtra
|
|
|
435
428
|
empty_config_line unless @file_contents.empty? || @begin_of_block
|
|
436
429
|
bare_config_line "#{name} {"
|
|
437
430
|
@begin_of_block = true
|
|
438
|
-
@indentation
|
|
431
|
+
@indentation.increment
|
|
439
432
|
yield if block_given?
|
|
440
|
-
@indentation
|
|
433
|
+
@indentation.decrement
|
|
441
434
|
bare_config_line "}"
|
|
442
435
|
@end_of_block = true
|
|
443
436
|
end
|
|
@@ -478,14 +471,14 @@ module Nginxtra
|
|
|
478
471
|
# in will be invoked (if given) if the template invokes yield.
|
|
479
472
|
def process_template!(template, options = {}, yielder = nil)
|
|
480
473
|
if template.respond_to? :call
|
|
481
|
-
block =
|
|
474
|
+
block = proc { instance_eval(&yielder) if yielder }
|
|
482
475
|
instance_exec options, block, &template
|
|
483
476
|
else
|
|
484
477
|
process_template_with_yields! template do |x|
|
|
485
478
|
if x
|
|
486
479
|
options[x.to_sym]
|
|
487
|
-
|
|
488
|
-
instance_eval
|
|
480
|
+
elsif yielder
|
|
481
|
+
instance_eval(&yielder)
|
|
489
482
|
end
|
|
490
483
|
end
|
|
491
484
|
end
|
|
@@ -522,45 +515,50 @@ module Nginxtra
|
|
|
522
515
|
# Output the passenger_root line, including the proper passenger
|
|
523
516
|
# gem path.
|
|
524
517
|
def passenger_root!
|
|
525
|
-
config_line %
|
|
518
|
+
config_line %(passenger_root #{Nginxtra::Config.passenger_spec.gem_dir})
|
|
526
519
|
end
|
|
527
520
|
|
|
528
521
|
# Output the passenger_ruby, including the proper ruby path.
|
|
529
522
|
def passenger_ruby!
|
|
530
|
-
config_line %
|
|
523
|
+
config_line %(passenger_ruby #{Nginxtra::Config.ruby_path})
|
|
531
524
|
end
|
|
532
525
|
|
|
533
526
|
# Output that passenger is enabled in this block.
|
|
534
527
|
def passenger_on!
|
|
535
|
-
config_line %
|
|
528
|
+
config_line %(passenger_enabled on)
|
|
536
529
|
end
|
|
537
530
|
|
|
538
531
|
private
|
|
532
|
+
|
|
533
|
+
def full_partial_paths(partial_name)
|
|
534
|
+
@config.partial_paths.lazy.map do |path|
|
|
535
|
+
File.join path, @filename, "#{partial_name}.rb"
|
|
536
|
+
end
|
|
537
|
+
end
|
|
538
|
+
|
|
539
539
|
def partial?(partial_name)
|
|
540
540
|
return true if Nginxtra::Config::Extension.partial? @filename, partial_name
|
|
541
541
|
|
|
542
|
-
|
|
543
|
-
File.
|
|
542
|
+
full_partial_paths(partial_name).any? do |path|
|
|
543
|
+
File.exist? path
|
|
544
544
|
end
|
|
545
545
|
end
|
|
546
546
|
|
|
547
547
|
def invoke_partial(partial_name, args, block)
|
|
548
|
-
if Nginxtra::Config::Extension.partial? @filename, partial_name
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
end
|
|
556
|
-
end
|
|
548
|
+
partial_path = if Nginxtra::Config::Extension.partial? @filename, partial_name
|
|
549
|
+
Nginxtra::Config::Extension.partial @filename, partial_name
|
|
550
|
+
else
|
|
551
|
+
full_partial_paths(partial_name).find do |path|
|
|
552
|
+
File.exist? path
|
|
553
|
+
end
|
|
554
|
+
end
|
|
557
555
|
|
|
558
556
|
if args.empty?
|
|
559
557
|
partial_options = {}
|
|
560
|
-
elsif args.length == 1 && args.first.
|
|
558
|
+
elsif args.length == 1 && args.first.is_a?(Hash)
|
|
561
559
|
partial_options = args.first
|
|
562
560
|
else
|
|
563
|
-
raise
|
|
561
|
+
raise Nginxtra::Error::InvalidPartialArguments
|
|
564
562
|
end
|
|
565
563
|
|
|
566
564
|
process_template! partial_path, partial_options, block
|
|
@@ -592,9 +590,9 @@ module Nginxtra
|
|
|
592
590
|
end
|
|
593
591
|
|
|
594
592
|
config_files = file_options.map(&:keys).inject([], &:+).uniq.map do |x|
|
|
595
|
-
file_options.
|
|
593
|
+
file_options.find do |option|
|
|
596
594
|
option.include? x
|
|
597
|
-
end
|
|
595
|
+
end[x]
|
|
598
596
|
end
|
|
599
597
|
|
|
600
598
|
process_files! config_files
|
|
@@ -608,13 +606,10 @@ module Nginxtra
|
|
|
608
606
|
def find_config_files!(path)
|
|
609
607
|
files_hash = {}
|
|
610
608
|
|
|
611
|
-
Dir["#{path}/**/*.rb"].
|
|
612
|
-
File.file? x
|
|
613
|
-
|
|
614
|
-
file_name = x
|
|
615
|
-
{ :path => x, :config_file => file_name }
|
|
616
|
-
end.each do |x|
|
|
617
|
-
files_hash[x[:config_file]] = x
|
|
609
|
+
Dir["#{path}/**/*.rb"].each do |x|
|
|
610
|
+
next unless File.file? x
|
|
611
|
+
file_name = x.sub %r{^#{Regexp.quote path.to_s}/(.*)\.rb$}, "\\1"
|
|
612
|
+
files_hash[file_name] = { path: x, config_file: file_name }
|
|
618
613
|
end
|
|
619
614
|
|
|
620
615
|
files_hash
|
|
@@ -653,19 +648,25 @@ module Nginxtra
|
|
|
653
648
|
@value == 0
|
|
654
649
|
end
|
|
655
650
|
|
|
656
|
-
def
|
|
657
|
-
|
|
651
|
+
def decrement
|
|
652
|
+
adjust(-1)
|
|
658
653
|
end
|
|
659
654
|
|
|
660
|
-
def
|
|
661
|
-
|
|
662
|
-
raise Nginxtra::Error::ConvertFailed.new("Missing block end!") if @value < 0
|
|
663
|
-
@value
|
|
655
|
+
def increment
|
|
656
|
+
adjust(1)
|
|
664
657
|
end
|
|
665
658
|
|
|
666
659
|
def to_s
|
|
667
660
|
" " * indent_size * @value
|
|
668
661
|
end
|
|
662
|
+
|
|
663
|
+
private
|
|
664
|
+
|
|
665
|
+
def adjust(amount)
|
|
666
|
+
@value += amount
|
|
667
|
+
raise Nginxtra::Error::ConvertFailed, "Missing block end!" if @value < 0
|
|
668
|
+
@value
|
|
669
|
+
end
|
|
669
670
|
end
|
|
670
671
|
end
|
|
671
672
|
end
|
|
@@ -677,5 +678,5 @@ end
|
|
|
677
678
|
# ...
|
|
678
679
|
# end
|
|
679
680
|
def nginxtra(*args, &block)
|
|
680
|
-
Nginxtra::Config.new
|
|
681
|
+
Nginxtra::Config.new(*args, &block)
|
|
681
682
|
end
|