Ce n'est pas strictement une réponse à votre question sur l'installation des .gempackages, mais vous pouvez spécifier toutes sortes d'emplacements gemme par gemme en éditant votre Gemfile .
La spécification d'un :pathattribut installera le gem à partir de ce chemin sur votre machine locale.
gem "foreman", path:"/Users/pje/my_foreman_fork"
Alternativement, la spécification d'un :gitattribut installera le gem à partir d'un dépôt 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"
Pour certains pare-feu, le protocole git peut également poser problème. Dans ce cas, essayezgem "foreman", :git => "https://github.com/pje/foreman.git"
kode
61
Il semble que le bundler ne puisse pas utiliser les fichiers .gem prêts à l'emploi. Le pointage du chemin: vers un répertoire contenant des fichiers .gem ne fonctionne pas. Certaines personnes ont suggéré de configurer un serveur gem local (geminabox, stickler) à cet effet.
Cependant, ce que j'ai trouvé beaucoup plus simple est d'utiliser un "serveur" gem local à partir du système de fichiers: il suffit de mettre vos fichiers .gem dans un répertoire local, puis d'utiliser "gem generate_index" pour en faire un référentiel Gem
Merci! De plus, j'avais besoin d'une troisième barre oblique pour faire "file: /// Absolute / Path / to / repo"
Anna
5
Ne serait-il pas plus simple d'exécuter "gem server" sur la ligne de commande et d'ajouter la source " localhost: 8808 " à votre Gemfile
Anna
C'est vraiment cool Martin! Merci pour le partage, c'est exactement ce que je recherchais car je ne voulais pas dépendre de l'exécution d'un gem serverni je ne voulais héberger l'ensemble du projet, juste le fichier .gem.
Leo Gallucci
6
Conseil bonus: vous pouvez contourner l'exigence de chemin absolu en utilisant File.expand_path comme cecisource "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Leo Gallucci
Ça ne marche pas pour moi. Mac OS X. Bundler v1.11.2:Could not fetch specs from file://Users/nakilon/....../
Nakilon
44
Je décompresserais votre bijou dans le dossier du fournisseur d'application
Vrai. mais que se passe-t-il si je ne l'ai pas déjà installé? (lors du déploiement sur un serveur) Impossible de trouver Imlib2-Ruby-0.5.2 dans l'une des sources. La commande est terminée
ddayan
184
vous pouvez pointer vers un répertoire local avec gem "gemname",: path => "~ / some / local / path"
JHurrah
5
Je pense que: path nécessite le dossier gem avec le fichier gemspec. Je n'ai que des fichiers .gem que je souhaite installer.
ddayan
1
Ok donc le déploiement du cap a réussi, mais le gem n'a pas été installé "Aucun fichier à charger - vips": /
ddayan
4
Ce n'est certainement pas vrai, du moins plus longtemps. Bundler ne regarde pas vos gemmes système, et ne passe que par ce qui se trouve dans le Gemfile. Une des raisons pour lesquelles c'est si terrible.
bioneuralnet
6
Vous pouvez forcer le bundler à utiliser les gemmes que vous déployez en utilisant "bundle package" et "bundle install --local"
Sur votre machine de développement:
bundle install
(Installe les gemmes requises et crée Gemfile.lock)
bundle package
(Cache les gemmes dans le vendeur / cache)
Sur le serveur:
bundle install --local
(--local signifie "utiliser les gemmes du vendeur / cache")
Que faire si je ne peux rien installer sur le serveur? Dans ce cas, j'ai besoin de construire avec rake mais le serveur n'a pas de gemme que j'utilise pour la construction; mais je n'ai aucun problème à vérifier les dépendances.
Henrik
"bundle install" ne fonctionnait pas pour moi si la gemme n'était pas incluse dans ma source Gemfile "existante.
Anna
Il suffit de supprimer le fichier gem forme temporairement le fichier de pierres précieuses avant de faire bundle installAprès cela, copiez le Gemfile au fournisseur / cache , ajoutez le dos de pierres précieuses au Gemfile et exécuter bundle install --local
bert Bruynooghe
1
bundle packageest une excellente suggestion, même maintenant, trois ans plus tard. Si votre version de Bundler est antérieure à la version 2.0 (pas encore publiée au moment de la rédaction de cet article), vous devrez l'utiliser bundle package --allsi vous souhaitez inclure des gemmes avec pathou des gitdépendances. Cependant, cela vous donnera un rappel utile s'il détecte de telles dépendances.
L2G
1
FYI: cela peut ne pas fonctionner aussi bien que vous l'espérez si vous développez sur une plate-forme différente de celle sur laquelle vous déployez (par exemple, développer sur macOS, déployer sur Linux). Selon la --localdocumentation: "Notez que si un joyau spécifique à la plate-forme existe sur rubygems.org, il ne sera pas trouvé."
Liam Dawson
1
Ajout .gemà vendor/cachesemble fonctionner. Aucune option requise dans Gemfile.
Réponses:
Ce n'est pas strictement une réponse à votre question sur l'installation des
.gem
packages, mais vous pouvez spécifier toutes sortes d'emplacements gemme par gemme en éditant votre Gemfile .La spécification d'un
:path
attribut installera le gem à partir de ce chemin sur votre machine locale.Alternativement, la spécification d'un
:git
attribut installera le gem à partir d'un dépôt git distant.(Comme @JHurrah l'a mentionné dans son commentaire .)
la source
gem "foreman", :git => "https://github.com/pje/foreman.git"
Il semble que le bundler ne puisse pas utiliser les fichiers .gem prêts à l'emploi. Le pointage du chemin: vers un répertoire contenant des fichiers .gem ne fonctionne pas. Certaines personnes ont suggéré de configurer un serveur gem local (geminabox, stickler) à cet effet.
Cependant, ce que j'ai trouvé beaucoup plus simple est d'utiliser un "serveur" gem local à partir du système de fichiers: il suffit de mettre vos fichiers .gem dans un répertoire local, puis d'utiliser "gem generate_index" pour en faire un référentiel Gem
Enfin pointez le bundler vers cet emplacement en ajoutant la ligne suivante à votre Gemfile
Si vous mettez à jour les gemmes dans le référentiel, assurez-vous de régénérer l'index.
la source
gem server
ni je ne voulais héberger l'ensemble du projet, juste le fichier .gem.source "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Could not fetch specs from file://Users/nakilon/....../
Je décompresserais votre bijou dans le dossier du fournisseur d'application
Ajoutez ensuite le chemin sur le Gemfile pour lier le gem décompressé.
la source
Par défaut, Bundler vérifiera d'abord votre système et s'il ne trouve pas de gemme, il utilisera les sources spécifiées dans votre Gemfile.
la source
Vous pouvez forcer le bundler à utiliser les gemmes que vous déployez en utilisant "bundle package" et "bundle install --local"
Sur votre machine de développement:
(Installe les gemmes requises et crée Gemfile.lock)
(Cache les gemmes dans le vendeur / cache)
Sur le serveur:
(--local signifie "utiliser les gemmes du vendeur / cache")
la source
bundle install
Après cela, copiez le Gemfile au fournisseur / cache , ajoutez le dos de pierres précieuses au Gemfile et exécuterbundle install --local
bundle package
est une excellente suggestion, même maintenant, trois ans plus tard. Si votre version de Bundler est antérieure à la version 2.0 (pas encore publiée au moment de la rédaction de cet article), vous devrez l'utiliserbundle package --all
si vous souhaitez inclure des gemmes avecpath
ou desgit
dépendances. Cependant, cela vous donnera un rappel utile s'il détecte de telles dépendances.--local
documentation: "Notez que si un joyau spécifique à la plate-forme existe sur rubygems.org, il ne sera pas trouvé."Ajout
.gem
àvendor/cache
semble fonctionner. Aucune option requise dansGemfile
.la source
J'ai trouvé plus simple d'exécuter mon propre serveur de gemmes en utilisant
geminabox
Consultez ces instructions simples .
la source