middleman-core 3.0.2 → 3.0.4
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.
@@ -223,7 +223,7 @@ module Middleman
|
|
223
223
|
# messages, which can take a long time (minutes at full CPU)
|
224
224
|
# if the object is huge or has cyclic references, like this.
|
225
225
|
def to_s
|
226
|
-
"#<Middleman::Application>"
|
226
|
+
"#<Middleman::Application:0x#{object_id}>"
|
227
227
|
end
|
228
228
|
|
229
229
|
# Expand a path to include the index file if it's a directory
|
@@ -37,6 +37,10 @@ module Middleman::Cli
|
|
37
37
|
:type => :boolean,
|
38
38
|
:default => false,
|
39
39
|
:desc => 'Generate profiling report for server startup'
|
40
|
+
method_option :reload_paths,
|
41
|
+
:type => :string,
|
42
|
+
:default => false,
|
43
|
+
:desc => 'Additional paths to auto-reload when files change'
|
40
44
|
|
41
45
|
# Start the server
|
42
46
|
def server
|
@@ -56,7 +60,8 @@ module Middleman::Cli
|
|
56
60
|
:environment => options["environment"],
|
57
61
|
:debug => options["verbose"],
|
58
62
|
:instrumenting => options["instrument"],
|
59
|
-
:"disable-watcher" => options["disable-watcher"]
|
63
|
+
:"disable-watcher" => options["disable-watcher"],
|
64
|
+
:reload_paths => options["reload_paths"]
|
60
65
|
}
|
61
66
|
|
62
67
|
puts "== The Middleman is loading"
|
@@ -9,43 +9,26 @@ module Middleman
|
|
9
9
|
DEFAULT_PORT = 4567
|
10
10
|
|
11
11
|
class << self
|
12
|
-
attr_reader :app
|
12
|
+
attr_reader :app, :port
|
13
13
|
delegate :logger, :to => :app
|
14
14
|
|
15
15
|
# Start an instance of Middleman::Application
|
16
16
|
# @return [void]
|
17
|
-
def start(
|
18
|
-
@
|
19
|
-
|
20
|
-
set :environment, options[:environment].to_sym
|
21
|
-
end
|
22
|
-
|
23
|
-
logger(options[:debug] ? 0 : 1, options[:instrumenting] || false)
|
24
|
-
end
|
25
|
-
|
26
|
-
port = options[:port] || DEFAULT_PORT
|
17
|
+
def start(opts={})
|
18
|
+
@options = opts
|
19
|
+
@port = @options[:port] || DEFAULT_PORT
|
27
20
|
|
21
|
+
mount_instance
|
28
22
|
logger.info "== The Middleman is standing watch on port #{port}"
|
29
23
|
|
30
|
-
@webrick ||= setup_webrick(
|
31
|
-
options[:host] || "0.0.0.0",
|
32
|
-
port,
|
33
|
-
options[:debug] || false
|
34
|
-
)
|
35
|
-
|
36
|
-
mount_instance(app)
|
37
|
-
|
38
|
-
start_file_watcher unless options[:"disable-watcher"]
|
39
|
-
|
40
24
|
@initialized ||= false
|
41
25
|
unless @initialized
|
42
26
|
@initialized = true
|
43
27
|
|
44
28
|
register_signal_handlers unless ::Middleman::WINDOWS
|
45
29
|
|
46
|
-
# Save the last-used options so it may be re-used when
|
30
|
+
# Save the last-used @options so it may be re-used when
|
47
31
|
# reloading later on.
|
48
|
-
@last_options = options
|
49
32
|
::Middleman::Profiling.report("server_start")
|
50
33
|
|
51
34
|
@webrick.start
|
@@ -66,8 +49,12 @@ module Middleman
|
|
66
49
|
# Simply stop, then start the server
|
67
50
|
# @return [void]
|
68
51
|
def reload
|
69
|
-
|
70
|
-
|
52
|
+
logger.info "== The Middleman is reloading"
|
53
|
+
|
54
|
+
unmount_instance
|
55
|
+
mount_instance
|
56
|
+
|
57
|
+
logger.info "== The Middleman is standing watch on port #{port}"
|
71
58
|
end
|
72
59
|
|
73
60
|
# Stop the current instance, exit Webrick
|
@@ -78,47 +65,47 @@ module Middleman
|
|
78
65
|
end
|
79
66
|
|
80
67
|
private
|
68
|
+
def new_app
|
69
|
+
opts = @options
|
70
|
+
@app =::Middleman::Application.server.inst do
|
71
|
+
if opts[:environment]
|
72
|
+
set :environment, opts[:environment].to_sym
|
73
|
+
end
|
74
|
+
|
75
|
+
logger(opts[:debug] ? 0 : 1, opts[:instrumenting] || false)
|
76
|
+
end
|
77
|
+
end
|
81
78
|
|
82
79
|
def start_file_watcher
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
80
|
+
return if @options[:"disable-watcher"]
|
81
|
+
|
82
|
+
first_run = !@listener
|
83
|
+
|
84
|
+
if first_run
|
85
|
+
# Watcher Library
|
86
|
+
require "listen"
|
87
|
+
@listener = Listen.to(Dir.pwd, :relative_paths => true)
|
88
|
+
end
|
89
|
+
|
90
90
|
@listener.change do |modified, added, removed|
|
91
91
|
added_and_modified = (modified + added)
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
return
|
98
|
-
end
|
99
|
-
|
100
|
-
# Otherwise forward to Middleman
|
93
|
+
# See if the changed file is config.rb or lib/*.rb
|
94
|
+
if needs_to_reload?(added_and_modified) || needs_to_reload?(removed)
|
95
|
+
reload
|
96
|
+
else
|
101
97
|
added_and_modified.each do |path|
|
102
|
-
|
98
|
+
app.files.did_change(path)
|
103
99
|
end
|
104
|
-
end
|
105
100
|
|
106
|
-
unless removed.empty?
|
107
|
-
# See if the changed file is config.rb or lib/*.rb
|
108
|
-
if needs_to_reload?(removed)
|
109
|
-
reload
|
110
|
-
return
|
111
|
-
end
|
112
|
-
|
113
|
-
# Otherwise forward to Middleman
|
114
101
|
removed.each do |path|
|
115
|
-
|
102
|
+
app.files.did_delete(path)
|
116
103
|
end
|
117
104
|
end
|
118
105
|
end
|
119
106
|
|
120
107
|
# Don't block this thread
|
121
|
-
@listener.start(false)
|
108
|
+
@listener.start(false) if first_run
|
122
109
|
end
|
123
110
|
|
124
111
|
# Trap the interupt signal and shut down smoothly
|
@@ -131,13 +118,12 @@ module Middleman
|
|
131
118
|
|
132
119
|
# Initialize webrick
|
133
120
|
# @return [void]
|
134
|
-
def setup_webrick(host,
|
121
|
+
def setup_webrick(host, is_logging)
|
135
122
|
@host = host
|
136
|
-
@port = port
|
137
123
|
|
138
124
|
http_opts = {
|
139
125
|
:BindAddress => @host,
|
140
|
-
:Port =>
|
126
|
+
:Port => port,
|
141
127
|
:AccessLog => []
|
142
128
|
}
|
143
129
|
|
@@ -147,15 +133,28 @@ module Middleman
|
|
147
133
|
http_opts[:Logger] = ::WEBrick::Log.new(nil, 0)
|
148
134
|
end
|
149
135
|
|
150
|
-
|
136
|
+
begin
|
137
|
+
::WEBrick::HTTPServer.new(http_opts)
|
138
|
+
rescue Errno::EADDRINUSE => e
|
139
|
+
logger.error "== Port #{port} is unavailable. Either close the instance of Middleman already running on #{port} or start this Middleman on a new port with: --port=#{port.to_i+1}"
|
140
|
+
exit(1)
|
141
|
+
end
|
151
142
|
end
|
152
143
|
|
153
144
|
# Attach a new Middleman::Application instance
|
154
145
|
# @param [Middleman::Application] app
|
155
146
|
# @return [void]
|
156
|
-
def mount_instance
|
157
|
-
@app =
|
158
|
-
@webrick
|
147
|
+
def mount_instance
|
148
|
+
@app = new_app
|
149
|
+
@webrick ||= setup_webrick(
|
150
|
+
@options[:host] || "0.0.0.0",
|
151
|
+
@options[:debug] || false
|
152
|
+
)
|
153
|
+
|
154
|
+
@app = new_app
|
155
|
+
start_file_watcher
|
156
|
+
|
157
|
+
@webrick.mount "/", ::Rack::Handler::WEBrick, app.class.to_rack_app
|
159
158
|
end
|
160
159
|
|
161
160
|
# Detach the current Middleman::Application instance
|
@@ -169,8 +168,22 @@ module Middleman
|
|
169
168
|
# @param [Array<String>] paths Array of paths to check
|
170
169
|
# @return [Boolean] Whether the server needs to reload
|
171
170
|
def needs_to_reload?(paths)
|
171
|
+
match_against = [
|
172
|
+
%r{^config\.rb},
|
173
|
+
%r{^lib/^[^\.](.*)\.rb$},
|
174
|
+
%r{^helpers/^[^\.](.*)_helper\.rb$}
|
175
|
+
]
|
176
|
+
|
177
|
+
if @options[:reload_paths]
|
178
|
+
@options[:reload_paths].split(',').each do |part|
|
179
|
+
match_against << %r{^#{part}}
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
172
183
|
paths.any? do |path|
|
173
|
-
|
184
|
+
match_against.any? do |matcher|
|
185
|
+
path.match(matcher)
|
186
|
+
end
|
174
187
|
end
|
175
188
|
end
|
176
189
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-09-
|
13
|
+
date: 2012-09-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -585,7 +585,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
585
585
|
version: '0'
|
586
586
|
segments:
|
587
587
|
- 0
|
588
|
-
hash: -
|
588
|
+
hash: -1143395816558407601
|
589
589
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
590
590
|
none: false
|
591
591
|
requirements:
|
@@ -594,7 +594,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
594
594
|
version: '0'
|
595
595
|
segments:
|
596
596
|
- 0
|
597
|
-
hash: -
|
597
|
+
hash: -1143395816558407601
|
598
598
|
requirements: []
|
599
599
|
rubyforge_project:
|
600
600
|
rubygems_version: 1.8.23
|