【问题标题】:Forcing reload of library files that are required by an autoloaded library file强制重新加载自动加载的库文件所需的库文件
【发布时间】:2012-05-25 23:56:39
【问题描述】:

Rails 3.2.3。我的自动加载路径中有一个带有/lib 的Rails 应用程序。我的一个库文件需要一堆这样的文件

Dir[Rails.root.join("lib/foo/*.rb")].each { |f| require f }

在开发中,如果我更改这些文件,它们不会重新加载。例如,如果我修改/lib/foo/bar.rb,我将不得不重新启动服务器才能看到这些更改。任何人都可以提出一种方法,以便在每次请求时正确重新加载它们吗?

【问题讨论】:

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


    【解决方案1】:

    如果您的自动加载路径中有这些文件:

    config.autoload_paths += %W(#{config.root}/lib)
    

    那么你不应该需要它们。你试过this吗?

    【讨论】:

    • 你有一个尾随括号!
    【解决方案2】:

    您必须添加或取消注释该行。

    config.autoload_paths += %W(#{config.root}/lib)

    到 config/application.rb 中的 Application 类

    【讨论】:

      【解决方案3】:

      require 不能很好地与 rails 的自动加载系统配合使用。

      require_dependency 将完成 require 所做的工作,但将自动加载系统保持在循环中,以便加载的常量将在请求结束时卸载。您可能需要确保文件位于 rails 的自动加载路径中

      【讨论】:

      • 一旦我删除了require,如果模块文件更改,重新加载会自动发生。谢谢@Frederick Cheung
      猜你喜欢
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      相关资源
      最近更新 更多