如何在每次请求时重新加载/ lib中的文件?

时间:2011-06-02 15:55:54

标签: ruby ruby-on-rails-3 module

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中所做的更改

有什么想法吗?

2 个答案:

答案 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文件。