2010-09-07 13 views
5

estoy usando RVM, haciendo lo siguiente:La "instalación de paquete" de Rails 3 es súper rápida (demora 1 segundo), pero no hay carriles después? (Usando RVM)

rvm install ree <--- (Ruby Enterprise Edition), or this can be 1.8.7 or 1.9.2 
rvm ree 
rvm gemset create 'proj' 
cd path/to/proj 
bundle install 

por lo Gemfile en ese proyecto dice:

gem 'rails', '3.0.0' 

y bundle install es muy rápido, la presentación de informes

Using rails (3.0.0) 

pero después de eso cuando escribo

$ rails -v 
/Library/Ruby/Site/1.8/rubygems.rb:779:in `report_activate_error': Could not find RubyGem rails (>= 0) (Gem::LoadError) 
    from /Library/Ruby/Site/1.8/rubygems.rb:214:in `activate' 
    from /Library/Ruby/Site/1.8/rubygems.rb:1082:in `gem' 
    from /usr/bin/rails:18 

$ which rails 
/usr/bin/rails 

entonces bundle install no instala los rieles como una gema? pero si escribo script/rails -v muestra que es 3.0.0

Respuesta

12

Esto es correcto. bundle install no instalará Rails como una gema en el sentido convencional. Ahora para explicar por qué.

Cuando Bundler ejecuta una instalación, instalará las gemas en un directorio: ~/.bundle/<type-of-ruby>/<version>/gems. Esto es diferente a la forma normal de instalarlos en una ruta del sistema. Cuando se instala una gema en una ruta del sistema, el ejecutable está disponible porque ese directorio está dentro de la ruta de carga. Ahora bien, esta es una cosa mala, porque solo puede tener un ejecutable por gema. ¿Tienes SomeGem v2 instalado pero quieres usar el generador de SomeGem v1? Demasiado.

Bündler resuelve este problema mediante la instalación de ellos en el lugar antes mencionado, solo requieren versiones específicas de las gemas que necesita (especificado en el interior de Gemfile. Mediante la ejecución simplemente rails, que está tratando de ejecutar el sistema de ejecutable (como en una proporcionada por hacer gem install rails) en lugar de la Bündler (proporcionado por hacer bundle install para un proyecto Rails).

para ejecutar el que Bündler instala debe ejecutar como este bundle exec rails dentro de un directorio que contiene un Gemfile que especifica cualquier versión de Rails. Bundler cargará una versión específica de Rails y ahora debería ser capaz de ejecutarlos uno al lado del otro con la única compensación que es el prefijo bundle exec a los comandos.

Personalmente, he asignado un alias a be y dos caracteres antes de algunos comandos son una compensación que vale la pena para evitar El séptimo círculo de gemas Conflicto Infierno en mi opinión.

+0

ahora, pero cada guía que vi (Guía oficial de rieles, Rails Tutorial de Michael Hartl) dice que la forma de usar Rails es solo "generar raíles", y presumiblemente, las personas Necesito 'gem install rails' antes de que puedan tener un proyecto (o al menos 1 persona en el equipo), para que pueda tener' script/rails' y 'bundle exec rails'. Entonces, esta 1 persona puede estar usando SomeGem v1 y SomeGem v2 al mismo tiempo de cualquier forma (en este caso, Gem es Rails). Creo que tal vez una documentación puede explicar las 3 formas de invocación de Rails ... –

+0

@Jian Lin: Sí, para generar inicialmente una aplicación de Rails, necesita tener la gema de Rails instalada sin usar Bundler. Para ejecutar un proyecto de Rails sin embargo, solo lo necesita instalado como una gema incluida. –

0

su procedimiento parece correcto (asegúrese de usar también el gemset recién creado, verifique por rvm info, do rvm [email protected] si no dice gemset: 'proj'), así que voy a asomar la cabeza y probar una sugerencia . Por cierto, rails se instala perfectamente con bundler.

He estado luchando con un comportamiento extraño gemas del sistema vs joyas locales, al igual que una gran cantidad de usuarios, incluyendo bundler Yehuda Katz, lo que lleva a este mensaje integral A Tale of Abort Traps

En resumen, si ejecuta paquete de instalación antes de tiene la gema del paquete (obteniendo el error gema "no encontrado"), luego paquete de instalación gema, seguido de otra instalación del paquete, la gema del paquete se ha instalado en su sistema , no rvm.

Solución: ¿Eliminar .bundle, (y do paquete de instalación de la gema?). Luego, abriría un nuevo término, do rvm ree @ proj, y gem install bundler antes de la instalación del paquete.

Yehuda dice en el post que está corregido en las nuevas versiones de bundler, pero lo experimenté hace unos días (bundler 1.0.0). Espero haber traído más ayuda que confusión a la mesa :)

Cuestiones relacionadas