2009-07-15 8 views
1

Existe-t-il un moyen facile, lors de l'exécution d'un script Ruby, pour qu'il installe automatiquement les gemmes nécessaires pour le script?La meilleure façon d'installer plusieurs gemmes sur un ordinateur?

Par exemple, tenez compte exigent des déclarations au sommet d'un script Ruby:

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

Maintenant, je sais (comme un être humain et programmeur) que pour ce script à exécuter sur un PC donné avec Ruby, la commande 'gem install archive-zip' doit être exécutée en premier, avant que le script ne fonctionne. Mais si ce script doit tourner sur des dizaines de PC, y a-t-il quelque chose qui peut me sauver d'avoir à m'assurer que TOUTES les dépendances de gem sont installées en premier?

De plus, que se passe-t-il si plusieurs gemmes sont requises?

Répondre

1

Je ne sais pas si cela est exactement ce que vous êtes après, mais quand j'ai un serveur mis en place ce que je veux je sauvegarder une liste de mes pierres précieuses à un endroit sûr ...

gem list > my_gems.txt 

Si je besoin de reconstruire la boîte ou de construire une autre machine J'utilise ce script pour installer les gemmes ...

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

c'est très proche de ce dont je parle. Mais à quoi ressemblerait le scénario si je VOULAIS les dépenances de la gemme? – Ash

+0

Supprimez simplement '--ignore dependencies' Mais si la liste est votre gem installé alors vous avez déjà les dépendances, donc il est plus rapide de ne pas s'en faire. – Henry

0

Les chaussures ont une façon très pratique de le faire. Voir ceci blog post by _why.

Vous pourriez le port une partie de ce à rubis standard (sans l'interface utilisateur de fantaisie)

1

En utilisant gem unpack vous pouvez décompresser les pierres précieuses dans un répertoire. De là, vous pouvez les inclure dans votre script. Par exemple, en choisissant au hasard la gemme morse (une gemme qui code/décode le code morse), disons que j'utilise gem unpack morse pour le mettre dans un répertoire/gems /. Il se décompacte dans le répertoire morse-0.0.2, puisque c'est la version.

$LOAD_PATH << './gems/morse-0.0.2/lib' 
require 'morse' 
# The gem is included, and Morse is now defined. 
Questions connexes