Melhor maneira de instalar múltiplas gemas em um computador?
Pergunta
Existe uma maneira fácil, ao executar um script Ruby, para obtê-lo para instalar automaticamente gemas necessárias para script?
Por exemplo, considere estes requerem declarações no topo de um script ruby:
require 'net/http'
require 'fileutils'
require 'archive/zip'
Agora, eu sei (como um ser humano e programador) que para este script para ser executado em um determinado PC com Ruby, o 'gem install archive-zip' necessidades comando a ser executado primeiro, antes de o script vai funcionar. Mas se este script precisa ser executado em dezenas de PCs, há alguma coisa que pode me salvar de ter que garantir que todas as dependências gem são instalado pela primeira vez?
Além disso, o que se há várias jóias necessário?
Solução
Não sei se isso é exatamente o que você está depois, mas quando eu tenho um servidor configurado como eu quero eu despejar uma lista dos meus gemas para um lugar seguro ...
gem list > my_gems.txt
Se eu precisar para reconstruir a caixa ou construir outra máquina eu uso este script para instalar as gemas ...
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
Outras dicas
Ao usar gem unpack
você pode descompactar as gemas em um diretório. De lá, você pode incluí-los em seu script. Por exemplo, escolhendo aleatoriamente a morse
gem (uma jóia que codifica / decodifica código Morse), digamos que eu use gem unpack morse
para colocá-lo em um diretório / gemas /. Ele descompacta para o diretório morse-0.0.2, já que é a versão.
$LOAD_PATH << './gems/morse-0.0.2/lib'
require 'morse'
# The gem is included, and Morse is now defined.
Shoes tem uma maneira realmente liso de fazer isso. Veja este blog por _why.
Você poderia port alguns dos que a ruby ??padrão (sem o UI fantasia)