2010-05-09 6 views
2

Je travaille sur une application de console ruby ​​(pas de rails!) Je vais installer cette application sur plusieurs machines. Je me demandais s'il y avait un moyen que je peux le construire, donc je ne dois pas installer les gemmes que j'utilise pour l'application sur chaque machine. J'aimerais pouvoir copier le répertoire sur chaque machine et l'exécuter. Idéalement, je voudrais mettre les gemmes dans le dossier lib ou quelque chose et les référencer à partir de là, donc je n'ai même pas à les installer sur ma machine dev. Y a-t-il un moyen de faire cela?Ruby gems in lib - principe du pneu de secours

En .net, nous appelons cela le principe du "pneu de secours".

merci, Craig

+0

en double de http://stackoverflow.com/questions/1110535/unpacking-freezing-gems-into- a-non-rails-ruby-app –

Répondre

2

Comment l'utilisation bundler?

Ensuite, vous pouvez inclure un Gemfile qui spécifie toutes les gemmes necssary et exécutez simplement "bundle install" sur chaque machine pour les tirer vers le bas.

Si vous voulez vraiment les regrouper avec l'application, exécutez "bundle package" et les gemmes seront stockées dans le fournisseur/cache.

+0

J'ai regardé cela et pourrait être la façon dont je finis par y aller. Je me demandais juste s'il n'y avait pas un moyen simple de copier les gemmes dans mon dossier lib afin qu'ils ne doivent pas être téléchargés? Dans d'autres langues, c'est vraiment facile. – fregas

+0

Juste mis à jour ma réponse pour montrer "paquet bundle" qui va emballer les gemmes au vendeur/cache. – Chap

+0

Je vais l'essayer. – fregas

1

Vous pouvez suivre la même approche que les rails et «vendre» vos gemmes. Cela implique de créer un nouveau répertoire (rails utilise le fournisseur/gems) et décompresser la gemme dans ce répertoire, en utilisant gem unpack.

Ensuite, vous configurez votre chemin de chargement pour inclure tous les sous-dossiers ci-dessous.

Modifier

Vous pouvez configurer votre chemin de charge en faisant quelque chose comme ça

Dir.glob(File.join("vendor", "gems", "*", "lib")).each do |lib| 
    $LOAD_PATH.unshift(File.expand_path(lib)) 
end 
+0

cool. comment configurer le chemin de chargement en ruby? – fregas

+0

Comme Bundler comprend une option pour déballer les gemmes, je voudrais aller avec ça. –

Questions connexes