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