如何直接从其路径中获取 Ruby gem?
How to require a Ruby gem directly from its path?
为了使用 rubyzip,我安装了 gems:
gem install --local rubyzip-1.1.7.gem
gem install --local zip-zip-0.3.gem
在我的代码中,我使用 require 方法调用 gems:
require 'zip/zip'
require 'zip/filesystem'
我想使用 require 直接从我机器上的位置加载 gems。
我想要这样的东西:
require 'path_to_my_zip_gem'
其中 path_to_my zip_gem 包含 gem 个文件
基本上,这是因为 require
方法从 $:
或 $LOAD_PATH
中列出的路径按名称加载文件
"If the filename does not resolve to an absolute path, it will be
searched for in the directories listed in $LOAD_PATH ($:)."
如果您想从 "local" 路径中获取 gem,那么 require_relative
方法可能会有所帮助,因为您可以指定一个相对于所需文件路径的路径。查看官方文档了解更多详情:
http://ruby-doc.org/core-2.2.2/Kernel.html#method-i-require_relative
最简单的答案是
Gem::Specification.find_by_name("GEM_NAME_HERE").full_gem_path
示例
> require File.join(Gem::Specification.find_by_name("railties").full_gem_path, "lib/rails/code_statistics.rb")
=> true
为了使用 rubyzip,我安装了 gems:
gem install --local rubyzip-1.1.7.gem
gem install --local zip-zip-0.3.gem
在我的代码中,我使用 require 方法调用 gems:
require 'zip/zip'
require 'zip/filesystem'
我想使用 require 直接从我机器上的位置加载 gems。
我想要这样的东西:
require 'path_to_my_zip_gem'
其中 path_to_my zip_gem 包含 gem 个文件
基本上,这是因为 require
方法从 $:
或 $LOAD_PATH
"If the filename does not resolve to an absolute path, it will be searched for in the directories listed in $LOAD_PATH ($:)."
如果您想从 "local" 路径中获取 gem,那么 require_relative
方法可能会有所帮助,因为您可以指定一个相对于所需文件路径的路径。查看官方文档了解更多详情:
http://ruby-doc.org/core-2.2.2/Kernel.html#method-i-require_relative
最简单的答案是
Gem::Specification.find_by_name("GEM_NAME_HERE").full_gem_path
示例
> require File.join(Gem::Specification.find_by_name("railties").full_gem_path, "lib/rails/code_statistics.rb")
=> true