2012-02-11 9 views
23

Esta es una pregunta común, pero ninguna de las respuestas parece resolver el problema. Me da la habitual: You have already activated rack 1.4.1, but your Gemfile requires rack 1.3.6. Using bundle exec may solve this.Cómo forzar al bastidor para que funcione alrededor del error habitual "Ya has activado el bastidor ..."?

borrar el archivo Gemlock hizo nada y funcionando de nuevo bundle install hizo nada ... corriendo bundle install --binstubs no solucionó el problema como "correr ./bin/{rake|rails|etc} a partir de la raíz de su aplicación "solo causó más errores". ¿Hay alguna forma de evitar el problema aparentemente común?

Respuesta

31

El problema es el siguiente:

  • que tiene (al menos) dos versiones del bastidor instalado.

  • Su Gemfile requiere una versión (1.3.6). Su entorno actual proporciona otra versión (1.4.1).

  • Cuando se ejecuta la aplicación, el entorno actual ya ha cargado 1.4.1.

  • Bundler sabe que necesita cargar 1.3.6, pero no puede cargarlo. No puede cargar más de una versión de la misma gema, por lo que la versión 1.4.1 gana desde que se cargó primero.

  • Bundler se queja de que.

desinstalación las gemas problemáticos (por ejemplo gem uninstall rack -v 1.3.6). Mejor aún, use RVM y gemas para aislar mejor sus gemas y no encontrará este problema.

+0

Gracias por su bien considerada respuesta. Sin embargo, lo arreglé de otra manera. Actualicé el sitio a Rails 3.2.1. Afortunadamente, el resto del sitio podría tomar la actualización. – user1149547

+0

¡Me alegro de que funcionó! –

-1

Abra Gemfile.lock, busque la entrada para el rack (1.3.6) y elimínelo.

+2

Nunca debe editar Gemfile.lock manualmente. –

+0

@ PiotrekOkoński ¿Cómo pudo él eliminar eso entonces? – peterh

1

Tuve el mismo problema al intentar implementar una aplicación de producción. Estoy usando rbenv para administrar mi unicornio de ambientes ruby ​​instalado por defecto en rbenv. Las dependencias de gemas listadas en Gemfile están siendo instaladas por bundler. Sucede que esto estaba causando el problema.

La solución alternativa que hice fue desinstalar el unicornio del entorno de rbenv e instalarlo a través del Gemfile. Después de todo, creo que este enfoque es más limpio y directo.

Si está utilizando RVM, el problema ocurre si define una gema en el entorno global que depende del bastidor de la misma manera que lo hace el unicornio y luego define un gemset por proyecto. Creo que esto se debe a las dependencias de los rieles 3.1 (aunque no estoy seguro). La solución es desinstalar unicornio (o la gema que instala el estante 1.4.1) del gemset global e instalarlo en un gemset por proyecto.

Si está utilizando bundler y RVM tiene dos opciones: - crear un gemset con los carriles y la gema que se instala en rack 1.4.1 (la más apropiada para estaciones de trabajo DEV) - poner la joya que depende de bastidor 1.4. 1 en el Gemfile y deja que el bundler a la magia.

0

Este problema también es común cuando se clona el proyecto de un repositorio (ejem. Github), ya que puede tener el archivo Gemsfile.lock ya. Entonces las gemas que tiene pueden ser diferentes a las que su entorno ya ha cargado. Entonces, primero obtenga una copia de seguridad de su Gemsfile.lock, luego quítelo y ejecute bundle install sin producción. Instalará todas sus dependencias de acuerdo con GemFile. Tenga en cuenta que si la aplicación es antigua, es posible que no funcione con el entorno de su máquina.

0

Si el mismo mensaje de error relativo a la primavera le trajo aquí, es decir, que está recibiendo un mensaje similar a este:

ya ha activado la primavera 1.4.0, pero su Gemfile requiere la primavera 1.3.6 .

la solución es la misma que la respuesta aceptada:

gem uninstall spring -v 1.4.0 
0

A veces todo lo que necesita hacer es simplemente instalar la gema.

tuve este problema en OpenShift e ido a la dir proyecto:

$ RHC ssh APP_NAME

$ cd aplicación de la raíz

$ gem install GEM_NAME

después de eso, la aplicación comenzó normalmente.

Cuestiones relacionadas