9

我已经 git 从 Github 克隆了一个 repo,现在我想尝试一下,因为我想查看代码并弄乱它。我创建了一个应该加载这个 gem 的文件 test.rb,但是我想加载我本地签出的版本,这样做的正确方法是什么?

现在我只是在使用一堆"require_relative 'the_gem_name/lib/file'",感觉不对。

4

2 回答 2

10

当您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

这种方式可能会更干净一些,因为通常您不想从代码内部弄乱加载路径,但如果您只是测试库,它可能并不重要。

于 2012-09-08T21:37:57.110 回答
5

按照评论中 apneadiving 的建议,我创建了一个 Gemfile 并添加了这一行

source "http://rubygems.org"

gem 'gem_name', path: '~/path/to/gem/source/folder'

然后bundle installbundle exec ruby test.rb并且它起作用了。

于 2012-09-08T21:13:16.160 回答