1

在运行 Ruby 脚本时,有没有一种简单的方法可以让它自动安装脚本所需的 gem?

例如,考虑 ruby​​ 脚本顶部的这些 require 语句:

require 'net/http'
require 'fileutils'
require 'archive/zip'

现在,我(作为人和程序员)知道,要让这个脚本在使用 Ruby 的给定 PC 上运行,需要先运行“gem install archive-zip”命令,然后脚本才能运行。但是如果这个脚本需要在几十台电脑上运行,有什么可以让我不必确保首先安装所有 gem 依赖项?

此外,如果需要多个宝石怎么办?

4

3 回答 3

1

通过使用gem unpack,您可以将 gem 解压缩到一个目录中。从那里,您可以将它们包含在您的脚本中。例如,随机挑选 gem morse(编码/解码摩尔斯电码的 gem),假设我gem unpack morse用来将它放在目录 /gems/ 中。它解压到目录 morse-0.0.2,因为那是版本。

$LOAD_PATH << './gems/morse-0.0.2/lib'
require 'morse'
# The gem is included, and Morse is now defined.
于 2009-07-15T03:42:26.703 回答
1

不确定这是否正是您所追求的,但是当我设置服务器时,我希望将我的宝石列表转储到安全的地方...

gem list > my_gems.txt

如果我需要重建盒子或构建另一台机器,我会使用这个脚本来安装 gems...

bulk_gems.rb
#! /usr/local/bin/ruby

STDIN.readlines.each do |l|
 m = l.match /^(\S+) \((.*)\)/
 unless m.nil?
   gem_name, versions = m[1], m[2].split(',')
   versions.each do |v|
     system "gem install #{gem_name} --version #{v} --ignore-dependencies"
   end
 end
end

more my_gems.txt | bulk_gems.rb
于 2009-07-15T22:23:42.070 回答
0

鞋子有一种非常巧妙的方式来做到这一点。请参阅_why 的这篇博文。

您可以将其中一些移植到标准 ruby​​(没有花哨的 UI)

于 2009-07-15T03:30:58.507 回答