在脚本中安装gem后,如何加载gem?

Tom*_*Tom 14 ruby gem

我有一个小的Ruby脚本,我正在编写,以自动化在本地机器上准备开发环境.因为我无法确定rubyzip2所有机器上都存在该库,所以我需要在需要时安装脚本.

目前,我的脚本正在执行以下操作:

begin
  require 'zip/zip'
rescue LoadError
  system("gem install rubyzip2")
end
Run Code Online (Sandbox Code Playgroud)

安装gem后,脚本继续执行; 但是,gem尚未加载,因此所有代码都需要rubyzip2暂停执行.

如何将gem加载到内存中以便脚本可以在安装后继续运行?

lou*_*uio 18

require 'thegem'您应该先检查gem的可用性,然后在需要时安装它,而不是执行和抢救错误.之后,您可以要求它.

看一下这篇文章的宝石可用性

或者这篇文章

编辑

安装后,如果您不想重新加载脚本,则需要清除gem路径.您可以使用此方法实现此目的:

Gem.clear_paths
Run Code Online (Sandbox Code Playgroud)

目前已经有回答问题,在这里

所以你的代码应该是这样的(例如):

begin
  gem "rubyzip2"
rescue LoadError
  system("gem install rubyzip2")
  Gem.clear_paths
end

require 'zip/zip'
Run Code Online (Sandbox Code Playgroud)


Ale*_*sky 7

随着捆绑版本高于1.10(更新只运行gem install bundler),可以使用其新的"内联"的功能描述这里.

require 'bundler/inline'

gemfile(true) do
  source 'https://rubygems.org'
  gem 'catpix'
end

puts Catpix::VERSION
Run Code Online (Sandbox Code Playgroud)

gemfile方法的第一个参数是是否应该安装尚未安装在用户系统上的gem.