我有git克隆了一个来自Github的回购,现在我想试验它,因为我想在代码周围捣乱它。我已经创建了一个文件test.rb,应该加载这个gem,但我想加载我本地检出的版本,这是正确的方法吗?
现在我只是使用了一堆"require_relative 'the_gem_name/lib/file'"
,感觉不对。
答案 0 :(得分:9)
当你require 'foo'
Ruby检查文件foo.rb
的加载路径中的所有目录并加载它找到的第一个目录时。如果找不到名为foo.rb
的文件,而您使用Rubygems ,则会引发LoadError
。
如果 使用Rubygems(可能是因为它包含在Ruby 1.9+中),那么搜索所有已安装的Gems而不是立即引发LoadError
以查看是否一个包含文件foo.rb
。如果找到这样的Gem,则将其添加到加载路径并加载文件。
如果要确保使用特定版本的库,可以自己操作加载路径。通常这不是建议的,但这是你想要做的那种情况。
将目录添加到加载路径有两种方法。首先,您可以使用$LOAD_PATH
(或$:
)全局变量在实际代码中执行此操作:
$LOAD_PATH.unshift '/path/to/the/gems/lib/'
require 'the_gem'
请注意,您通常要添加gem的lib
目录,而不是gem的顶级目录(实际上这可能因实际Gem而异,并且可能需要添加多个dir,但是lib
是常态。)
另一种方法是使用-I
命令行切换到ruby
可执行文件:
$ ruby -I/path/to/the/gems/lib/ test.rb
这种方式可能会更清晰一些,因为通常您不希望从代码内部弄乱加载路径,但如果您只是测试库,那么它可能并不重要。
答案 1 :(得分:4)
在评论中提到apneadiving的建议之后,我创建了一个Gemfile并添加了这一行
source "http://rubygems.org"
gem 'gem_name', path: '~/path/to/gem/source/folder'
然后bundle install
和bundle exec ruby test.rb
并且它有效。