如何在文件更改时自动重新加载lib/中的代码?

15

这是关于这个问题的跟进。在开发过程中,每次我更改lib/文件夹下的代码时都必须重新启动rails应用程序,以使代码更改生效。如何让这些代码像控制器、模型等一样自动重新加载?


4个回答

3

对于Rails 3,请根据@science答案中给出的说明进行操作。在您的environments/development.rb文件中,添加以下行:

ActiveSupport::Dependencies.autoload_paths << File::join( Rails.root, 'lib')
ActiveSupport::Dependencies.explicitly_unloadable_constants << 'MyModuleInLibFolder'

当然,将您的模块名称替换为MyModuleInLibFolder

@science的回答已被删除,因为它只包含链接(该链接已经失效了,不值得一提)。 - Andrew Grimm

1
module ActsAsReloadable
  def self.included(base)
    ActiveSupport::Dependencies.explicitly_unloadable_constants << base.name if Rails.env == 'development'
  end
end

使用它非常简单,只需在lib/*文件中包含ActsAsReloadable,并在config/application.rb中添加config.autoload_paths +=%W(#{config.root} / lib)。

0

为什么不直接输入呢?

load Rails.root + '/lib/your_lib.rb'

除非我使用 join,否则会失败:load Rails.root.join('lib/your_lib.rb') - Gavin Miller

0

如果你已经尝试了之前的方法但是还是不起作用(就像我的情况),可以尝试在development.rb中使用config.reload_classes_only_on_change选项。

这里使用的是Rails 4.2 ✋。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接