提交 772c2b0b 编写于 作者: J José Valim

Use the new ActiveSupport::FileUpdateChecker instead of RoutesReloader.

上级 71703c98
......@@ -10,7 +10,7 @@ class Railtie < Rails::Railtie
# Prepare dispatcher callbacks and run 'prepare' callbacks
initializer "action_dispatch.prepare_dispatcher" do |app|
ActionDispatch::Callbacks.to_prepare { app.routes_reloader.reload_if_changed }
ActionDispatch::Callbacks.to_prepare { app.routes_reloader.execute_if_updated }
end
end
end
\ No newline at end of file
require 'active_support/core_ext/hash/reverse_merge'
require 'active_support/file_update_checker'
require 'fileutils'
require 'rails/plugin'
require 'rails/engine'
......@@ -46,7 +47,6 @@ class Application < Engine
autoload :Configuration, 'rails/application/configuration'
autoload :Finisher, 'rails/application/finisher'
autoload :Railties, 'rails/application/railties'
autoload :RoutesReloader, 'rails/application/routes_reloader'
class << self
private :new
......@@ -121,11 +121,18 @@ def railties
end
def routes_reloader
@routes_reloader ||= RoutesReloader.new
@routes_reloader ||= ActiveSupport::FileUpdateChecker.new([]){ reload_routes! }
end
def reload_routes!
routes_reloader.reload!
routes = Rails::Application.routes
routes.disable_clear_and_finalize = true
routes.clear!
routes_reloader.paths.each { |path| load(path) }
ActiveSupport.on_load(:action_controller) { routes.finalize! }
ensure
routes.disable_clear_and_finalize = false
end
def initialize!
......
module Rails
class Application
class RoutesReloader
attr_reader :paths
def initialize
@paths, @last_change_at = [], nil
end
def changed_at
routes_changed_at = nil
paths.each do |path|
config_changed_at = File.stat(path).mtime
if routes_changed_at.nil? || config_changed_at > routes_changed_at
routes_changed_at = config_changed_at
end
end
routes_changed_at
end
def reload!
routes = Rails::Application.routes
routes.disable_clear_and_finalize = true
routes.clear!
paths.each { |path| load(path) }
ActiveSupport.on_load(:action_controller) { routes.finalize! }
nil
ensure
routes.disable_clear_and_finalize = false
end
def reload_if_changed
current_change_at = changed_at
if @last_change_at != current_change_at
@last_change_at = current_change_at
reload!
end
end
end
end
end
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册