ruby - 我可以确定 RubyGems 将哪些路径添加到加载路径以使我的命令行应用程序正常工作吗?

标签 ruby command-line rubygems load-path

在 gemspec 中,我可以指定 require_paths,它表示我希望能够在运行时从中请求的路径。这些由 RubyGems 放入 $LOAD_PATH

我的问题是:有没有一种方法可以在运行时确定这些路径是什么?我可以检查 $LOAD_PATH 的元素并知道哪些是专门为我的 gem 添加的吗?

更新:最终,我想从 gem 内部动态加载 ruby​​ 文件,例如

load_from 'foo/bar'

然后找到 $MY_GEMS_LIB_DIR/foo/bar/*.rb。我当然可以通过整个 $LOAD_PATH 来寻找 foo/bar,但我宁愿将它限制在 gem 上。

最佳答案

我不知道我是否理解你的需要(我的英语不好 :-/);无论如何,如果问题是确定当您需要 gem 时将加载的目录,您可以使用 Gem::Specification.lib_dirs_glob :

Gem::Specification.find_by_name('irbtools').lib_dirs_glob
#=> "/home/my_user/.rvm/gems/ruby-1.9.3-p125/gems/irbtools-1.2.2/lib"

Gem::Specification.find_by_name('xyz').lib_dirs_glob
# raises a Gem::LoadError

因此 load_from 的可能实现可能是:

def load_from(gem_name, path)
  path_to_load = File.join(Gem::Specification.find_by_name(gem_name).lib_dirs_glob, path)
  Dir.glob(path_to_load).each(&method(:load))
end

尝试加载 Thor::CoreExt:

Thor::CoreExt #=> NameError: uninitialized constant Thor
load_from 'thor', 'thor/core_ext/*.rb'
Thor::CoreExt #=> Thor::CoreExt

这可以在我的机器上使用 ruby​​ 1.9.3 和 gem 1.8.21 运行。

关于ruby - 我可以确定 RubyGems 将哪些路径添加到加载路径以使我的命令行应用程序正常工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9865168/

相关文章:

ruby - 警告 : RubyGems 1. 找不到 2+ 索引:RubyGems 将恢复到降低性能的旧索引

Ruby:需要安装 git 才能安装 RVM,并且在 Ubuntu 上安装 git 时遇到问题

ruby-on-rails - 如何修复 `new' :String 的未定义方法 "Rack::Cors"

php - 2011 Web 脚本语言和动态重新加载

ruby - 在 Ruby 终端中创建百分比计数器

python - 操作系统: programmatically get list of applications for a file

ruby - 错误 : "Could not find rake", 尚未安装 Rake

ruby-on-rails - 删除由markdown创建的html

ruby-on-rails - rails ActiveRecord : Find All Users Except Current User

ruby - 获取包含毫秒的时间戳