如何将 gem 安装到当前文件夹

How to install a gem to the current folder

我想在本地使用 Ruby gem(不是为整台机器安装它)用于单个脚本。我知道如何使用带有 Gemfile 和 bundle install 的 Bundler 安装 gems。但是对于一个简单的脚本,设置捆绑器似乎有点过分了。

有没有办法将 gem 安装到我的脚本的子文件夹并使用它,类似于 npm 在 node_modules 中安装 Node.js 包的方式?

这是我到目前为止所尝试过的方法。

gem install -i ruby plistruby/gems/plist-3.1.0

中安装 plist gem

我试图通过 require './ruby/gems/plist-3.1.0/lib/plist 在我的脚本 extract.rb 中要求它,但是 require: cannot load such file: plist/generator 失败了(lib/plist.rb 要求 plist/generator.rb)。

Ruby 2.0 OSX

您可以使用 --path 选项捆绑安装到不同的位置,例如:

bundle install --path vendor/bundle

另见 http://bundler.io/v1.1/bundle_install.html

您可以通过为特定应用创建 gem 集来实现。请按照以下步骤操作 -

$ rvm gemset create <gemset_name>

它将为当前选择的 ruby 版本创建一个 gem 集。 您可以通过此命令检查当前选择的 ruby 版本 -

$ rvm list

然后通过 cd 导航到您的应用程序目录。

现在执行这个命令 -

$ rvm use @<gemset_name>

现在,每当您安装任何 gem 时,它将安装在当前 gem 集合中,该集合不会用于整台机器。

确保 - 你 运行 gem install bundler 在新创建的 gem 中设置,这样当你 运行 bundle install.

如果您不想涉及 Bundler,只需像您的示例中那样在本地安装您的 gem,然后在您的脚本中设置 GEM_PATH 环境,然后在您需要之前,例如:

#!/usr/bin/env ruby

ROOT = File.expand_path('..', __FILE__)
ENV['GEM_PATH'] = File.join(ROOT, 'ruby')
# or to just append to
# ENV['GEM_PATH'] += ":#{ File.join(ROOT, 'ruby') }"

require 'plist'

假设您的脚本与 ruby 文件夹位于同一文件夹中(否则相应地调整文件路径)。