4 # Rack::Reloader checks on every request, but at most every +secs+
5 # seconds, if a file loaded changed, and reloads it, logging to
8 # It is recommended you use ShowExceptions to catch SyntaxErrors etc.
11 def initialize(app
, secs
=10)
13 @secs = secs
# reload every @secs seconds max
18 if Time
.now
> @last + @secs
20 reload
!(env['rack.errors'])
28 def reload
!(stderr=$stderr)
29 need_reload
= $LOADED_FEATURES.find_all
{ |loaded
|
31 if loaded
=~
/\A[.\/]/ # absolute filename or 1.9
34 abs
= $LOAD_PATH.map
{ |path
| ::File.join(path
, loaded
) }.
35 find
{ |file
| ::File.exist
? file
}
39 ::File.mtime(abs
) > @last - @secs rescue false
46 need_reload
.each
{ |l
|
47 $LOADED_FEATURES.delete l
50 need_reload
.each
{ |to_load
|
53 stderr.puts
"#{self.class}: reloaded `#{to_load}'"
55 rescue LoadError
, SyntaxError
=> e
56 raise e
# Possibly ShowExceptions