提交 ce97c794 编写于 作者: R Rafael França 提交者: GitHub

Merge pull request #27647 from Shopify/fully-eagerload-journey

Fully initialize routes before the first request is handled
......@@ -31,6 +31,13 @@ def build_formatter
Visitors::FormatBuilder.new.accept(spec)
end
def eager_load!
required_names
offsets
to_regexp
nil
end
def ast
@spec.find_all(&:symbol?).each do |node|
re = @requirements[node.to_sym]
......
......@@ -73,6 +73,14 @@ def initialize(name, app, path, constraints, required_defaults, defaults, reques
@internal = internal
end
def eager_load!
path.eager_load!
ast
parts
required_defaults
nil
end
def ast
@decorated_ast ||= begin
decorated_ast = path.ast
......
......@@ -22,6 +22,13 @@ def initialize(routes)
@routes = routes
end
def eager_load!
# Eagerly trigger the simulator's initialization so
# it doesn't happen during a request cycle.
simulator
nil
end
def serve(req)
find_routes(req).each do |match, parameters, route|
set_params = req.path_parameters
......
......@@ -349,6 +349,12 @@ def initialize(config = DEFAULT_CONFIG)
@formatter = Journey::Formatter.new self
end
def eager_load!
router.eager_load!
routes.each(&:eager_load!)
nil
end
def relative_url_root
@config.relative_url_root
end
......
......@@ -124,6 +124,7 @@ def self.complete(_state)
# the hook are taken into account.
initializer :set_routes_reloader_hook do |app|
reloader = routes_reloader
reloader.eager_load = app.config.eager_load
reloader.execute_if_updated
reloaders << reloader
app.reloader.to_run do
......
......@@ -4,11 +4,13 @@ module Rails
class Application
class RoutesReloader
attr_reader :route_sets, :paths
delegate :execute_if_updated, :execute, :updated?, to: :updater
attr_accessor :eager_load
delegate :updated?, to: :updater
def initialize
@paths = []
@route_sets = []
@eager_load = false
end
def reload!
......@@ -19,6 +21,19 @@ def reload!
revert
end
def execute
ret = updater.execute
route_sets.each(&:eager_load!) if eager_load
ret
end
def execute_if_updated
if updated = updater.execute_if_updated
route_sets.each(&:eager_load!) if eager_load
end
updated
end
private
def updater
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册