我在lib下的Rails项目中有一个模块。我运行'rails c'并在控制台中进行一些实验。我对lib下的模块进行了更改,输入'reload!'从控制台,它不会重新加载文件。我必须退出控制台并重新启动,这真的很痛苦。
有没有更好的方法来重新加载该文件?
答案 0 :(得分:152)
试试这个:
load "#{Rails.root}/lib/yourfile.rb"
答案 1 :(得分:2)
如果有人有兴趣,这是我在how to auto-reload require files in Rails的调查结果,而不重启服务器。
该解决方案现在可以作为Ruby gem require_reloader使用。
答案 2 :(得分:0)
这是可以帮助你的monkeypatch,将其粘贴到rails控制台中(或者你可以把这段代码放在monkeypatch文件中 - 虽然我不建议使用实用方法monkeypatching Object):
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!
在任何重新加载源代码的对象上。
答案 3 :(得分:0)
将以下内容添加到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
您现在可以通过在控制台中输入lib
重新加载reload_lib!
中的所有文件