在轨道下可以轨道控制台重新加载模块?

我在我的Rails项目下有一个模块。 我运行“rails c”并在控制台上做一些实验。 我改变了lib下的模块,input'reload!' 从控制台,它不重新加载文件。 我必须退出控制台并重新启动,这是真正的痛苦。

有没有更好的方式来重新加载该文件?

尝试这个:

load "#{Rails.root}/lib/yourfile.rb" 

如果有人感兴趣,这里是我的调查结果如何自动重新加载需要Rails的文件,而无需重新启动服务器。

该解决scheme现在可作为Ruby gem require_reloader使用 。

这是monkeypatch,可以帮助你,粘贴在rails控制台(或者你可以把这个代码放在一个monkeypatch文件中 – 虽然我不build议monkeypatching对象与实用工具方法):

 class Object def self.reload_myself! method = (self.instance_methods(false) + self.methods(false)).select{|method| method.to_s[0] =~ /[A-Za-z]/}.last if method if self.instance_methods(false).index method method = self.instance_method(method) elsif method = self.method(method) end if (method.source_location) source_location = method.source_location[0] puts "reloading: #{source_location}" load "#{source_location}" else puts "could not reload #{self.name}" end end end end 

你可以打电话

 reload_myself! 

在任何对象上重新加载其源代码。

将以下内容添加到config/initializers/reload.rb

 class Object def reload_lib! Dir["#{Rails.root}/lib/**/*.rb"].map { |f| [f, load(f) ] } #.all? { |a| a[1] } # uncomment above if you don't want to see all the reloaded files end end 

您现在可以通过键入reload_lib!来重新加载lib的所有文件reload_lib! 在控制台