我正在编辑一个gem,其中有通常的require命令,指向加载的gem(我正在谈论的gem被称为nirvana,其中的文件包含require’navana’,require’navana / shell‘等等上). 当我使用应用程序的bin文件(/ mypath
当我使用应用程序的bin文件(/ mypath / nirvana / bin / nirvana)时,我希望在其中编写的require’nirvana’命令指向该gem的本地fork中的文件(我正在编辑的那些文件) ),我希望不加载原始的涅宝石宝石,它与经典的宝石安装一起安装.
我不想用所有的’nirvana’命令替换
require File.dirname(File.expand_path(__FILE__)) + '/../lib/nirvana.rb'
……这会解决我的问题,但这很难看!有没有办法不加载nirvana gem,并使require’nirvana’加载我的库(可能在$LOAD_PATH …中添加它们)?
如果您使用gems二进制可执行文件执行此操作,那么您应该只需要’nirvana.rb’一次.所以这条线只需要出现一次.看到它出现在这些文件中是很常见的.请注意,您的示例可以更好地编写为
require File.expand_path('../lib/nirvana.rb', __FILE__)
由于File::expand_path采用可选的第二个参数(目录字符串).
许多作者还会在执行二进制文件之前将lib目录转移到$LOAD_PATH中,以便在尝试加载任何已安装的gem之前加载本地文件.