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