web-dev-qa-db-fra.com

Comment spécifier des fichiers .gem locaux dans mon Gemfile?

J'ai quelques fichiers gem que j'installe via gem install xx.gem. Puis-je dire à Bundler de les utiliser? Ou dois-je spécifier le chemin source?

139
ddayan

Par défaut, Bundler va d'abord vérifier votre système et s'il ne trouve pas de gemme, il utilisera les sources spécifiées dans votre Gemfile.

27
JHurrah

Ce n'est pas strictement une réponse à votre question sur l'installation des packages .gem, mais vous pouvez spécifier tous les types d'emplacements gemme par gemme en modifiant votre Gemfile .

Spécifier un attribut :path installera la gem à partir de ce chemin sur votre ordinateur local.

gem "foreman", path: "/Users/pje/my_foreman_fork"

Sinon, la spécification d'un attribut :git installera la gem à partir d'un référentiel git distant.

gem "foreman", git: "git://github.com/pje/foreman.git"

# ...or at a specific SHA-1 ref
gem "foreman", git: "git://github.com/pje/foreman.git", ref: "bf648a070c"

# ...or branch
gem "foreman", git: "git://github.com/pje/foreman.git", branch: "jruby"

# ...or tag
gem "foreman", git: "git://github.com/pje/foreman.git", tag: "v0.45.0"

(Comme @JHurrah mentionné dans son commentaire .)

255
pje

Apparemment, le groupeur ne peut pas utiliser les fichiers .gem immédiatement. Pointant le: chemin vers un répertoire contenant des fichiers .gem ne fonctionne pas. Certaines personnes ont suggéré d'installer un serveur de gem local (geminabox, stickler) à cet effet.

Cependant, ce que j’ai trouvé beaucoup plus simple, c’est d’utiliser un "serveur" de gem local à partir du système de fichiers: Il suffit de placer vos fichiers .gem dans un répertoire local, puis d’utiliser "gem generate_index" pour en faire un référentiel de gem

mkdir repo
mkdir repo/gems
cp *.gem repo/gems
cd repo
gem generate_index

Enfin, pointez le bundle sur cet emplacement en ajoutant la ligne suivante à votre Gemfile

source "file://path/to/repo"

Si vous mettez à jour les gems dans le référentiel, veillez à régénérer l'index.

54
Martin Thiede

Je décompresserais votre pierre précieuse dans le dossier du fournisseur de l'application

gem unpack your.gem --target /path_to_app/vendor/gems/

Ajoutez ensuite le chemin sur le Gemfile pour lier la gemme décompressée.

gem 'your', '2.0.1', :path => 'vendor/gems/your'
38
edap

Vous pouvez forcer le bundler à utiliser les gems que vous déployez à l'aide de "bundle package" et de "bundle install --local"

Sur votre machine de développement:

bundle install

(Installe les gemmes requises et rend Gemfile.lock)

bundle package

(Met en cache les gemmes dans vendeur/cache)

Sur le serveur:

bundle install --local

(--local signifie "utiliser les gemmes de vendor/cache")

4

Ajouter .gem à vendor/cache semble fonctionner. Aucune option requise dans Gemfile.

0
Victor Moroz

J'ai trouvé plus facile de faire fonctionner mon propre serveur Gem avec geminabox

Voir ces instructions simples .

0
Dave Sag