Rails在每个请求上加载控制器,帮助器和模型。
我的控制器有一堆模块,其中包括共享操作的方法
每次更改模块时,我都必须重新启动Rails才能使操作中的更改生效
我知道如何告诉rails重新加载这些模块吗?
我的目录结构如下:
app/ controllers/ app1/ users_controller.rb app2/ users_controller.rb lib/ templates/ controllers/ users_controller_template.rb
App1 :: UsersController和App2 :: UsersController都像这样加载UsersControllerTeplate:
# app/controllers/app1/users_controller.rb
class App1::UsersController < App1::ApplicationController
require "templates/controllers/users_controller_template"
include Templates::Controllers::UsersControllerTemplate
end
# templates/controllers/users_controller_template.rb
module Templates::Controllers::UsersControllerTemplate
def self.included(base)
base.class_eval do
# some class macros called here
end
end
# actions defined here
def index
end
end
在application.rb中我添加了:
config.autoload_paths += %W{ #{config.root}/lib/templates/ }
但是我仍然需要重新加载服务器以查看在users_controller_template.rb中所做的更改
有什么想法吗?
答案 0 :(得分:3)
您可以将它们添加到application.rb文件中的autoload_paths
,它们将与模型和控制器一起自动重新加载。
config.autoload_paths << "#{config.root}/lib"
答案 1 :(得分:2)
在config/application.rb
:
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
这将重新加载lib文件夹中的所有Ruby文件以及lib子目录中的任何Ruby文件。