¿Cómo "activo" una versión diferente de una gema en particular?

85

Quiero cambiar entre los rieles 2.3.10 como la gema "activa" para mi sistema operativo, para poder invocarla en la línea de comandos.

¿Es posible hacer esto? No estoy usando rvm. Quizás es hora de empezar.

Lo intenté gem install rails --version=2.3.10, pero eso solo asegura que la versión de la gema esté instalada, no la coloca /usr/bin/rails.

(Ya uso bundler para mis aplicaciones, pero no he necesitado ningún control preciso sobre las gemas a nivel del sistema operativo hasta ahora)

John Bachir
fuente

Respuestas:

154

Si su problema es ejecutar binarios de una determinada versión, entonces:

rails --version # => the latest version
rails _2.3.10_ --version # => Rails 2.3.10

Este patrón ( gem-binary _gem-version_) funciona para cualquier binario de gemas.

Espero eso ayude.

Daniel Vartanov
fuente
1
Oh, esto me acaba de ahorrar un fin de semana largo en la oficina, ¡gracias!
Lachlan McD.
2
Eso no parece funcionar para todos ellos: rackup _1.4.3_ --version<br> Rack 1.1 (Release: 1.4)
Chloe
1
rackup imprime solo la versión de lanzamiento (consulte Rack.versiony Rack.release github.com/rack/rack/blob/master/lib/rack.rb ). Intente gem install rack --version=1.3 && rackup _1.3.0_ --version, se imprimiráRack 1.1 (Release: 1.3)
Daniel Vartanov
Y por si acaso, así es como funciona:which rackup | xargs cat
Daniel Vartanov
Gracias Daniel muy útil
ruta
12

Utilice RVM

RVM te permite administrar diferentes versiones de Ruby y Gems. Puede instalar una versión de ruby ​​usando, por ejemplo

rvm install 1.9.2

Luego puede usarlo usando:

rvm use 1.9.2

Use gemas específicas por proyecto con gemas.

Si desea un mayor espacio de nombres, puede configurar conjuntos de gemas; directorios que contendrán gemas específicas para un proyecto específico.

rvm gemset create myproject

entonces puedes usarlos así:

rvm use 1.9.2@myproject

Automatización

Para automatizar el proceso de cambio de gemas, coloca los archivos .ruby-version y .ruby-gemset en la raíz de tu proyecto. Pop la versión de Ruby y el nombre del conjunto de gemas que desea usar dentro de ellos y RVM seleccionará el conjunto de gemas correcto cuando ingrese al directorio de su proyecto.

Instalar gemas en su gema

Instale sus gemas en su conjunto de gemas de la manera habitual usando bundler si lo está usando:

bundle install

o simplemente usando el viejo regular:

gem install mygem

Las gemas irán en el conjunto de gemas correcto.

Alternativas RVM

También puede consultar rbenv, que hace un trabajo similar.

superluminario
fuente
1
El problema con rvm es (como mencionaste) que maneja versiones ruby ​​y versiones gem. rbenv solo maneja las versiones ruby ​​y deja que el empaquetado maneje las versiones gemas.
daslicious
7

Puedes usar RVM

Luego, también puede usar Bundler , que administra bien las dependencias de gemas.

En tus Gemfile

gem "rails", "2.3.10"

y en tu aplicación

require 'rubygems'
require 'bundler/setup'

y tu estas listo.

Chubas
fuente
Además de esto, si desea que algunos scripts solo "vean" las versiones declaradas en su Gemfile, ejecútelos como "bundle exec <script-name>", por ejemplobundle exec warble
rustyx
3

EDITAR: Acabo de ver su mención RVM en la publicación. Definitivamente el camino a seguir.

Querrá instalar RVM : es un paquete increíble que le permitirá administrar diferentes Rubys y diferentes conjuntos de gemas en la misma máquina. Puede cambiar de un lado a otro con total facilidad.

Aquí está la guía de instalación: http://rvm.beginrescueend.com/rvm/install/

Una vez que tenga todo listo, puede ver todos los rubys instalados en la línea de comando con rvm list, y cambiar con rvm use ruby-head, por ejemplo. RVM mantiene las gemas de cada rubí separadas, lo que debería ayudar con su pregunta.

Sam Ritchie
fuente