Лучший способ установить несколько компьютеров на компьютер? - PullRequest
1 голос
/ 15 июля 2009

Есть ли простой способ, при запуске скрипта Ruby, заставить его автоматически устанавливать гемы, необходимые для скрипта?

Например, рассмотрим эти операторы require в верхней части скрипта ruby:

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

Теперь я знаю (как человек и программист), что для запуска этого скрипта на данном ПК с Ruby необходимо сначала выполнить команду 'gem install archive-zip', прежде чем скрипт будет работать. Но если этот сценарий должен работать на десятках компьютеров, может ли что-нибудь, что может избавить меня от необходимости сначала устанавливать ВСЕ зависимости от гемов?

Кроме того, что если требуется несколько драгоценных камней?

Ответы [ 3 ]

1 голос
/ 15 июля 2009

Используя gem unpack, вы можете распаковать драгоценные камни в каталог. Оттуда вы можете включить их в свой скрипт. Например, случайным образом выбирая камень morse (камень, который кодирует / декодирует азбуку Морзе), скажем, я использую 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.
1 голос
/ 16 июля 2009

Не уверен, что это именно то, что вам нужно, но когда я настроил сервер так, как я хочу, я отправлю список своих драгоценных камней в безопасное место ...

gem list > my_gems.txt

Если мне нужно восстановить коробку или собрать другую машину, я использую этот скрипт для установки драгоценных камней ...

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
0 голосов
/ 15 июля 2009

У ботинок действительно отличный способ сделать это. Смотрите это сообщение в блоге _why .

Вы можете перенести часть этого на стандартный ruby ​​(без необычного интерфейса)

...