(Fonder ce vos commentaires sur la question)
Vous devrez ajouter hpricot (et tout autre bijou ce besoin) à votre Gemfile
afin qu'ils soient mis à disposition par Bundler. Bundler est de loin le moyen le plus facile d'éviter les conflits de gemme et de la cocotte. Imaginez cette situation: Vous perdez en quelque sorte les gemmes que vous avez actuellement. Qu'il se passe par un changement de format ou de système ou toute autre raison. Quoi que ce soit, vous avez perdu vos gemmes. Comment allez-vous ré-installer toutes vos gemmes? Vous pourrait garder une liste d'eux ailleurs, mais est-ce vraiment probable? Bundler résout ce problème en indiquant les gemmes requises par votre application et en ajoutant uniquement ces gemmes au chemin de chargement, ce qui explique pourquoi vous ne pouvez pas trouver hpricot
. Lorsque vous exécutez bundle install
la première fois, cela crée un Gemfile.lock
qui contient quelque chose comme ceci:
GEM
remote: http://rubygems.org/
specs:
abstract (1.0.0)
actionmailer (3.0.0)
...
Parce que vous commettez ce fichier à votre « solution » de contrôle de code source de choix (que ce soit Git, SVN, FTP, quelle que soit, ce n'est pas important), vous avez un moyen précis de spécifier les gemmes précises et les versions précises des gemmes que votre application utilise. Quand/Si vos gemmes sont effacées, vous pouvez simplement cloner à nouveau votre projet et exécuter bundle install
. Parce que le fichier Gemfile.lock
existe, vous aurez exactement les mêmes gemmes que vous aviez à l'origine, même s'il y avait des mises à jour.
Si vous ne voulez pas les exactes mêmes pierres précieuses, il suffit d'exécuter bundle update
et cela va ignorer les spécifications Gemfile.lock
et au lieu de revenir à Gemfile
en fonction de les définir. Cela va vérifier les nouvelles versions de gems et les installer, mettre à jour le Gemfile.lock
quand c'est fait. Honnêtement, je ne comprends pas la haine de Bundler. Si vous pouviez expliquer en termes plus larges que "OMG IT SUCKS YEHUDA EST SATAN", je serais très obligé.
Edit: WedTM demandé un échantillon Gemfile et le code connexe:
Dans le Gemfile vous auriez ceci:
group(:scripts) do
gem 'gem1'
end
Exiger ces pierres précieuses pour vos scripts:
require 'bundler'
Bundler.require(:scripts)
Vous pouvez également demander les gemmes par défaut que vous pouvez faire en ajoutant simplement par défaut n'importe où aux arguments de require
:
Bundler.require(:default, :scripts)
Si cela pour une raison quelconque ne fonctionne pas, j'imagine que ce serait parce qu'il ne peut pas localiser le Gemfile
. Cela peut être corrigé en définissant le ENV['BUNDLE_GEMFILE']
sur le chemin d'accès au Gemfile
.
S'il vous plaît montrez-nous votre Gemfile. –
Échec avec quel message d'erreur? –
@Ryan Bigg, je ne veux pas avoir besoin de chaque gemme dans mon Gemfile. Je veux avoir un dossier plein de scripts, (ruby et non-ruby) que ruby va parcourir avec des backticks et s'exécuter sur le système. La sortie de chacun de ces fichiers sera ensuite enregistrée par l'application my rails dans la base de données. Avoir ceux qui dépendent des gemmes dans l'application Rails ne devrait PAS être une exigence. Je devrais être capable de l'exécuter dans le contexte natif des systèmes. – WedTM