Conjuntos independientes de gemas con RVM

Sin lugar a dudas, una de mis funcionalidades favoritas de RVM es la posibilidad de tener conjuntos independientes de gemas (gemsets). Lo explicaré con un ejemplo.

Ahora que Rails 3 está cerca, es normal que queramos ir haciendo algunos experimentos. Sin embargo, si instalamos estas gemas, podemos tener problemas con Rails 2.x (yo los he sufrido con la gema i18n, sin ir más lejos).

RVM nos permite crear un conjunto de gemas independiente de forma que podemos seleccionar cuál queremos utilizar en cada momento. Supongamos que tenemos nuestra instalación de RVM con las gemas de Rails 2.3.8. Si queremos instalar Rails 3, podemos hacer lo siguiente:

$ rvm gemset create rails3
$ rvm use ruby-1.8.7@rails3
$ gem install rails --prerelease

Si hacemos un gem list podremos comprobar que tenemos disponibles todas las gemas de Rails 3 (y ni rastro de las de Rails 2.3.8).

$ gem list
abstract (1.0.0)
actionmailer (3.0.0.beta4)
actionpack (3.0.0.beta4)
activemodel (3.0.0.beta4)
activerecord (3.0.0.beta4)
activeresource (3.0.0.beta4)
activesupport (3.0.0.beta4)
arel (0.4.0)
...

Como se infiere de este ejemplo, cuando queremos referirnos a un gemset en particular, no tenemos más que añadir @nombre al final de la versión. Si no ponemos nada, utilizara el gemset por defecto.

RVM nos ofrece, además, un gemset global cuyas gemas se incluyen en todos los gemsets del intérprete en cuestión. Siguiendo con el ejemplo, podríamos instalar la gema de PostreSQL una sóla vez y que estuviera disponible para todos los gemsets.

$ rvm 1.8.7@global gem install postgres
$ rvm use 1.8.7
$ gem list postgres

*** LOCAL GEMS ***

postgres (0.7.9.2008.01.28)
$ gem use 1.8.7@rails3
$ gem list postgres

*** LOCAL GEMS ***

postgres (0.7.9.2008.01.28)

En definitiva, creo que esta es una funcionalidad realmente interesante aunque he dejado bastantes cosas en el tintero. Lo mejor es que echen un vistazo a la documentación de RVM.

Trackback URL for this post:

http://devnull.blogs.banot.net/nd10/trackback/60

Comments (0)

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <b>
  • Lines and paragraphs break automatically.
  • Images can be added to this post.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.