我可以确定RubyGems添加到加载路径的路径以使我的命令行应用程序
发布时间:2020-12-17 07:09:48 所属栏目:百科 来源:网络整理
导读:在gemspec中,我可以指定require_paths,它表示我希望在运行时能够要求的路径.这些由 RubyGems放入$LOAD_PATH. 我的问题是:有没有办法可以确定这些路径在运行时是什么?我可以检查$LOAD_PATH的元素并知道哪些是为我的gem添加的吗? 更新:最后,我想从gem内部
在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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |