rails management python ruby virtualenv

python - management - Ruby equivalente de virtualenv?



rvm rails (7)

¿Hay algo similar a la utilidad de Python virtualenv ?

Básicamente, le permite instalar paquetes de Python en un entorno de espacio aislado, por lo que easy_install django no entra en el directorio de paquetes de sitio de todo el sistema, sino en el directorio virtualenv-created.

Por ejemplo:

$ 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

¿Hay algo como esto para RubyGems?


Creo que te gustará la sandbox .


Mencionaré la forma en que hago esto con Bundler (que uso con RVM - RVM para administrar los rubíes y un conjunto predeterminado de gemas globales, Bundler para manejar las gemas específicas del proyecto)

bundler install --binstubs --path vendor

Ejecutar este comando en la raíz de un proyecto instalará las gemas enumeradas de su Gemfile, colocará las libs en ./vendor , y cualquier ejecutable en ./bin y todas las s require (si usa bundle console o Bundler requiere) hará referencia estos exes y libs.

Funciona para mi.


Nadie parece haber mencionado a rbenv .


Ni sandbox, RVM ni rbenv administran las versiones de las dependencias de gemas de su aplicación. La herramienta para eso es bundler .

  • use un Gemfile como la declaración de dependencia de su aplicación
  • utilice bundle install para instalar versiones explícitas de estas dependencias en una ubicación aislada
  • use bundle exec para ejecutar su aplicación

Recomiendo direnv . Es un conmutador de entorno para el shell.

Antes de cada solicitud, comprueba la existencia de un archivo ".envrc" en los directorios actuales y principales. Si el archivo existe (y está autorizado), se carga en un subconjunto bash y todas las variables exportadas son luego capturadas por direnv y luego se pone a disposición el shell actual.

Aquí está cómo usar directamente con ruby-install

+ ruby-install

Agregue esto a ~/.direnvrc

use_ruby() { local ruby_root=$HOME/.rubies/$1 load_prefix "$ruby_root" layout_ruby }

Instale ruby-install ( brew install ruby-install ) e instale un montón de rubíes.

ruby-install ruby 1.9.3 ruby-install ruby 2.0.0 ruby-install ruby 2.2.0

Y luego haga un par de enlaces simbólicos para su conveniencia:

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

Y finalmente en cualquier .envrc un proyecto:

use ruby 2.0

Esto colocará todas las gemas en el directorio .direnv/ruby del proyecto (facilita la apertura de las gemas). bundler pondrá los binarios de wrapper en .direnv/bin (¡no más .direnv/bin bundle exec !).

+ rbenv

También es posible usar rbenv agregando el comando use rbenv en cualquier archivo .envrc . Esto activará rbenv, que a su vez pondrá los envoltorios de rubí en la RUTA.

Tenga en cuenta que no es necesario instalar rbenv en .bashrc o .zshrc para que esto funcione.

+ RVM

Aquí está el .envrc más complicado que uso en proyectos ruby:

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

rvm se usa para seleccionar la versión de ruby ​​adecuada para usted

los comandos de diseño establecen automáticamente algunas de las variables de entorno habituales. Por ahora solo existe el diseño Ruby. Lo que hace es establecer la variable de entorno GEM_HOME y su directorio bin en su ruta. Como depende de la versión de ruby, asegúrese de llamarla después de "rvm". Como cada directorio de diseño de ruby ​​tiene su propio GEM_HOME, no necesita usar los conjuntos de valores de rvm.

PATH_add precede y expande la ruta relativa dada. En ese caso, uso esto para segregar los binstubs bundler de mis propios scripts bin con bundle install --binstubs .direnv/bundler-bin

Si quieres saber qué hacen exactamente esos comandos, por ahora: cat direnv stdlib | Menos


Si solo necesita instalar gemas como no raíz, intente configurar la variable de entorno GEM_HOME . Entonces solo ejecuta gem .

Por ejemplo:

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


RVM funciona más cerca de cómo funciona virtualenv ya que te permite sandbox diferentes versiones de rubíes y sus gemas, etc.