如何让Pry的load命令在首次缓存后重新加载Ruby依赖文件?
问题原因
Ruby的require、require_relative机制默认仅会加载一次文件,已经加载过的文件路径会被存入全局数组$LOADED_FEATURES,后续调用相同路径的require/require_relative时会直接跳过加载逻辑。你重复加载board.rb时,内部的require_relative "card"检测到card.rb已经在已加载列表中,就不会同步最新的修改内容。
解决方法
- 方法1:修改开发环境的引入逻辑
开发阶段把board.rb中的require_relative "card"替换为load "card.rb",load方法不会检查已加载列表,每次调用都会强制重新读取文件内容,开发完成上线前改回require_relative即可。 - 方法2:手动清除已加载记录(无需修改业务代码)
修改完card.rb后,先在PRY中执行以下命令删除card.rb的已加载记录,再重新加载board.rb即可生效:
如果需要批量重载当前目录下所有修改过的项目文件,可以执行批量清理命令:$LOADED_FEATURES.delete(File.expand_path("card.rb")) load "board.rb"$LOADED_FEATURES.reject! { |path| path.start_with?(Dir.pwd) } load "board.rb" - 方法3:使用PRY重载插件
安装pry-reload插件后,可直接执行reload!命令自动识别并重载所有修改过的项目文件,无需手动操作:
安装命令:gem install pry-reload
启动PRY后执行require "pry-reload"即可使用,也可以把这段命令写入~/.pryrc配置文件,每次启动PRY自动生效。
内容的提问来源于stack exchange,提问作者Yandri
相关产品推荐
相关产品推荐

