我有一个应用程序,在ActionDispatch::Routing::RouteSet::Dispatcher.controller_reference
和Object.const_set
的帮助下,我在Class.new
方法中动态创建控制器类。
这很好用,直到我修改了这个动态创建的控制器所依据的控制器(这种情况发生了 LOT ,因为我不断对控制器进行更改)。
这会抛出以下异常:
ArgumentError
A copy of Base::FooController has been removed from the module tree but is still active!
我有一个Base::FooController
是父,我正在创建一个名为Bar::FooController
的控制器。
ActiveSupport::Dependencies.load_missing_constant
中抛出此异常。有没有办法重新加载/重新创建这个类并避免异常?
的ActiveSupport / LIB / active_support / dependencies.rb
def load_missing_constant(from_mod, const_name)
log_call from_mod, const_name
# I want to do a check here and recreate the controllers that are needed....
unless qualified_const_defined?(from_mod.name) && Inflector.constantize(from_mod.name).equal?(from_mod)
raise ArgumentError, "A copy of #{from_mod} has been removed from the module tree but is still active!"
end
...
答案 0 :(得分:0)
尝试在config/environments/development.rb
&中找到此属性config/environments/production.rb
:
config.cache_classes = true
config.cache_classes
控制是否应在每个请求上重新加载应用程序类和模块。
另外,请查看下面#5中的初始化顺序(注意蓝色注释)。