with versiones rails que mac instalar actualizar ruby-on-rails ruby rubygems rvm rbenv

ruby-on-rails - versiones - rvm install rails



¿Cómo funcionan realmente RVM y rbenv? (5)

Entonces, para resumir las excelentes respuestas anteriores, la principal diferencia práctica entre RVM y rbenv es cuando se selecciona la versión de Ruby.

rbenv:

rbenv agrega una cuña al inicio de tu camino, un comando con el mismo nombre que Ruby. Cuando se escribe ruby en una línea de comando, la corrección se ejecuta en su lugar (porque también se llama "ruby" y viene primero en la ruta). El shim busca una variable de entorno o .rbenv_version archivo .rbenv_version para indicarle a qué versión de Ruby delegar.

RVM:

RVM le permite establecer una versión de Ruby directamente llamando rvm use . Además, también anula el comando del sistema de cd . Cuando .rvmrc en una carpeta que contiene un archivo .rvmrc , se ejecuta el código dentro del archivo .rvmrc . Esto se puede usar para establecer una versión de Ruby, o cualquier otra cosa que te apetezca.

Otras diferencias

Por supuesto, hay otras diferencias. RVM tiene gemsets fuera de la caja, mientras que rbenv requiere un poco más de pirateo (pero no mucho). Ambas son soluciones funcionales para el problema.

Estoy interesado en cómo funcionan realmente RVM y rbenv.

Obviamente, cambian entre las diferentes versiones de Ruby y las gemas, pero ¿cómo se logra esto? Supuse que simplemente estaban actualizando enlaces simbólicos, pero habiendo profundizado en el código (y debo admitir que mi conocimiento de Bash es superficial) parecen estar haciendo más que esto.


Escribí un artículo en profundidad: http://niczsoft.com/2011/11/what-you-should-know-about-rbenv-and-rvm/

La diferencia básica es donde se cambia el entorno de shell:

  • RVM: ha cambiado cuando cambias a Ruby.
  • rbenv: ha cambiado cuando ejecutas un ejecutable Ruby / gem.

Además, lo que pasa con RVM es que cubre mucho más que administrar Rubies, tiene mucho más que cualquier otra herramienta (hay otros aparte de RVM y rbenv: https://twitter.com/#!/mpapis/status/171714447910502401 )

No se olvide de la asistencia instantánea que recibe en IRC en el canal "#rvm" en los servidores de Freenode.


La diferencia principal parece ser http://niczsoft.com/2011/11/what-you-should-know-about-rbenv-and-rvm/ . Ruby está cambiado:

  • para RVM manualmente (uso rvm) o automáticamente durante el cambio de directorios
  • para rbenv automáticamente cada vez que se ejecuta un comando de ruby

RVM se basa en el comando cd modificado y la selección manual de Ruby por rvm use . rbenv usa wrappers o "shims" para todos los comandos ruby ​​básicos como mecanismo predeterminado para seleccionar ruby. RVM crea envoltorios para herramientas de línea de comandos básicas como gema, rastrillo, rubí, también. Se usan, por ejemplo, en CronJobs (ver http://rvm.io/integration/cron/ ), pero no son el mecanismo predeterminado para cambiar la versión de Ruby.

Por lo tanto, ambos métodos seleccionan "automáticamente" la versión correcta de Ruby sobrescribiendo los comandos y utilizando envoltorios. rvm anula comandos de shell como cd. rbenv anula todos los comandos básicos de ruby, como ruby, irb, rake y gem.


Breve explicación: rbenv funciona enganchándose en la PATH su entorno. El concepto es simple, pero el diablo está en los detalles; cuchara completa a continuación.

Primero, rbenv crea cuñas para todos los comandos ( ruby , irb , rake , gem , etc.) en todas las versiones instaladas de Ruby. Este proceso se llama reafirmante . Cada vez que instales una nueva versión de Ruby o instales una gema que proporcione un comando, ejecuta rbenv rehash para asegurarte de que todos los nuevos comandos estén ajustados.

Estas cuñas viven en un único directorio ( ~/.rbenv/shims por defecto). Para usar rbenv, solo necesita agregar el directorio de calzas al frente de su PATH :

export PATH="$HOME/.rbenv/shims:$PATH"

Entonces, cada vez que ejecutas ruby desde la línea de comandos o ejecutas un script cuyo shenang lee #!/usr/bin/env ruby , tu sistema operativo ~/.rbenv/shims/ruby encontrará ~/.rbenv/shims/ruby y lo ejecutará en lugar de cualquier otro ruby ejecutable que puede haber instalado.

Cada shim es un pequeño script de Bash que a su vez ejecuta el rbenv exec . Entonces con rbenv en su camino, irb es equivalente a rbenv exec irb , y ruby -e "puts 42" es equivalente a rbenv exec ruby -e "puts 42" .

El comando rbenv exec averigua qué versión de Ruby desea usar, luego ejecuta el comando correspondiente para esa versión. Así es cómo:

  1. Si se RBENV_VERSION la variable de entorno RBENV_VERSION , su valor determina la versión de Ruby que se usará.
  2. Si el directorio de trabajo actual tiene un archivo .rbenv-version , su contenido se usa para establecer la variable de entorno RBENV_VERSION .
  3. Si no hay .rbenv-version archivo .rbenv-version en el directorio actual, rbenv busca en cada directorio padre un archivo .rbenv-version hasta que .rbenv-version la raíz de su sistema de archivos. Si se encuentra uno, su contenido se usa para establecer la variable de entorno RBENV_VERSION .
  4. Si RBENV_VERSION aún no está configurado, rbenv intenta configurarlo utilizando el contenido del archivo ~/.rbenv/version .
  5. Si no se especifica ninguna versión en cualquier lugar, rbenv asume que desea usar el "sistema" Ruby, es decir, cualquier versión que se ejecute si rbenv no estuviera en su ruta.

(Puede establecer una versión de Ruby específica del proyecto con el rbenv local , que crea un archivo .rbenv-version en el directorio actual. De manera similar, el rbenv global modifica el archivo ~/.rbenv/version ).

Armado con una variable de entorno RBENV_VERSION , rbenv agrega ~/.rbenv/versions/$RBENV_VERSION/bin al frente de su PATH , luego ejecuta el comando y los argumentos pasados ​​a rbenv exec . Voila!

Para ver a fondo lo que sucede debajo del capó, intente configurar RBENV_DEBUG=1 y ejecute un comando de Ruby. Cada comando de Bash que ejecute rbenv se escribirá en su terminal.

Ahora, rbenv solo se preocupa por cambiar versiones, pero un ecosistema próspero de complementos lo ayudará a hacer todo, desde instalar Ruby hasta configurar su entorno , administrar "conjuntos de gemas" e incluso automatizar el bundle exec .

No estoy seguro de qué tiene que ver el soporte de IRC con el cambio de las versiones de Ruby, y rbenv está diseñado para ser lo suficientemente simple y comprensible como para no requerir soporte. Pero si alguna vez necesita ayuda, el rastreador de problemas y Twitter están a solo un par de clics de distancia.

Divulgación: soy el autor de rbenv, ruby-build y rbenv-vars.


rvm system env > before rvm jruby # or whatever env > after diff after before

Te da aproximadamente:

< GEM_HOME=$HOME/.gem/ruby/1.9.1 --- > GEM_HOME=$HOME/.rvm/gems/jruby-1.6.6 < GEM_PATH=$HOME/.gem/ruby/1.9.1 --- > GEM_PATH=$HOME/.rvm/gems/jruby-1.6.6:$HOME/.rvm/gems/jruby-1.6.6@global *bunch of rvm_* > MY_RUBY_HOME=$HOME/.rvm/rubies/jruby-1.6.6 > RUBY_VERSION=jruby-1.6.6 > IRBRC=$HOME/.rvm/rubies/jruby-1.6.6/.irbrc

Y precede:

$HOME/.rvm/gems/jruby-1.6.6/bin:$HOME/.rvm/gems/jruby-1.6.6@global/bin

a $PATH