web-dev-qa-db-fra.com

Ruby équivalent de virtualenv?

Existe-t-il quelque chose de similaire à l'utilitaire Python virtualenv ?

En gros, cela vous permet d'installer des paquetages Python dans un environnement en bac à sable. Ainsi, easy_install Django ne sera pas placé dans votre répertoire site-packages, mais dans le répertoire créé par virtualenv.

Par exemple:

$ virtualenv test
New python executable in test/bin/python
Installing setuptools...cd .........done.
$ cd test/
$ source bin/activate
(test)$ easy_install tvnamer
Searching for tvnamer
Best match: tvnamer 0.5.1
Processing tvnamer-0.5.1-py2.5.Egg
Adding tvnamer 0.5.1 to easy-install.pth file
Installing tvnamer script to /Users/dbr/test/bin

Using /Library/Python/2.5/site-packages/tvnamer-0.5.1-py2.5.Egg
Processing dependencies for tvnamer
Finished processing dependencies for tvnamer
(test)$ which tvnamer 
/Users/dbr/test/bin/tvnamer

Y a-t-il quelque chose comme ça pour RubyGems?

148
dbr

RVM est plus proche du fonctionnement de virtualenv puisqu'il vous permet de créer différentes versions de Ruby, leurs gemmes, etc.

74
Van Nguyen

Ni sandbox, RVM, ni rbenv ne gèrent les versions des dépendances de gem de votre application. L'outil pour cela est bundler .

  • utilisez un Gemfile comme déclaration de dépendance de votre application
  • utilisez bundle install pour installer des versions explicites de ces dépendances dans un emplacement isolé
  • utilisez bundle exec pour exécuter votre application
61
pje

Personne ne semble avoir mentionné rbenv .

17
Xuan

Je pense que vous aimerez bac à sable .

16
dylanfm

Si vous devez uniquement installer des gems en tant que non-root, essayez de définir la variable d'environnement GEM_HOME. Puis lancez simplement gem.

Par exemple:

$ export GEM_HOME=$HOME/local/gems
$ gem install rhc
13
mpb

Je vais mentionner la façon dont je fais cela avec Bundler (que j'utilise avec RVM - RVM pour gérer les rubis et un ensemble par défaut de gemmes globales, Bundler pour gérer des gemmes spécifiques à un projet)

bundler install --binstubs --path vendor

L'exécution de cette commande à la racine d'un projet installera les gems répertoriés dans votre Gemfile, placera les bibliothèques dans ./vendor et tous les exécutables dans ./bin et tous les requires (si vous utilisez bundle console ou si Bundler l'exige) référenceront ces exes et libs.

Travaille pour moi.

11
iain

Je recommande direnv . C'est un commutateur d'environnement pour le shell.

Avant chaque invite, il vérifie l'existence d'un fichier ".envrc" dans les répertoires actuel et parent. Si le fichier existe (et autorisé), il est chargé dans un sous-shell bash et toutes les variables exportées sont ensuite capturées par direnv, puis mises à disposition du shell actuel.

Voici comment utiliser direnv avec Ruby-install

+ Ruby-install

Ajoutez ceci au ~/.direnvrc

use_Ruby() {
  local Ruby_root=$HOME/.rubies/$1
  load_prefix "$Ruby_root"
  layout_Ruby
}

Installez Ruby-install (brew install Ruby-install) et installez un tas de rubis.

Ruby-install Ruby 1.9.3
Ruby-install Ruby 2.0.0
Ruby-install Ruby 2.2.0

Et ensuite, faites quelques liens symboliques pour plus de commodité:

ln -s .rubies/1.9 Ruby-1.9.3-p*
ln -s .rubies/2.0 Ruby-2.0.0
ln -s .rubies/2.2 Ruby-2.2.0

Et enfin dans le .envrc de tout projet:

use Ruby 2.0

Cela mettra toutes les pierres précieuses dans le répertoire .direnv/Ruby du projet (ce qui facilite leur ouverture). bundler mettra les fichiers binaires de wrapper dans .direnv/bin (pas plus de bundle exec!). 

+ rbenv

Il est également possible d'utiliser rbenv en ajoutant la commande use rbenv dans n'importe quel fichier .envrc. Ceci activera rbenv qui, à son tour, mettra les enveloppes Ruby dans le chemin.

Notez qu'il n'est pas nécessaire d'installer rbenv dans les fichiers .bashrc ou .zshrc pour que cela fonctionne.

+ RVM

Voici le fichier .envrc le plus compliqué que j'utilise pour les projets Ruby:

rvm use 1.8.7
layout Ruby
PATH_add .direnv/bundler-bin

rvm est utilisé pour sélectionner la version de Ruby qui vous convient

les commandes de mise en forme définissent automatiquement certaines des variables d'environnement habituelles. Pour l'instant, seule la mise en page Ruby existe. Ce qu'il fait est de définir la variable d'environnement GEM_HOME et son répertoire bin dans votre chemin. Parce que cela dépend de la version de Ruby, assurez-vous de l'appeler après "rvm". Étant donné que chaque répertoire de mise en page Ruby a son propre fichier GEM_HOME, vous n'avez pas besoin d'utiliser les jeux de gems de rvm.

PATH_add ajoute et étend le chemin relatif donné. Dans ce cas, j’utilise cette méthode pour séparer les binstubs du bundler de mes propres scripts bin avec bundle install --binstubs .direnv/bundler-bin

Si vous voulez savoir ce que font exactement ces commandes, pour l'instant: cat direnv stdlib | Moins

4
Shin Kim

Mineshaft est un projet sur lequel je travaille depuis un certain temps et sur lequel je poursuis mes travaux de développement.

Il offre à la fois la possibilité de créer des environnements virtuels similaires à ceux de virtualenv et d’installer Ruby globalement.

0
ctesterman