Ya has activado X, pero tu Gemfile requiere Y


Al ejecutar rake obtengo este error:

Ya ha activado rake 0.9.2, pero su Gemfile requiere rake 0.8.7. Considere usar bundle exec.

Usar bundle exec rake en lugar de solo rake parece funcionar, pero ¿es la mejor manera de solucionar esto?

Author: Andrew Marshall, 2011-06-11

6 answers

Utilizando bundle exec es la forma correcta de hacer esto.

Básicamente lo que está sucediendo es que has actualizado rake a 0.9.2 que ahora entra en conflicto con la versión especificada en tu Gemfile. Anteriormente, la última versión de rake había coincidido con la versión de su Gemfile, por lo que no recibió ninguna advertencia cuando simplemente usaba rake.

Yehuda Katz (uno de los desarrolladores originales de Bundler) lo explica todo en esta entrada de blog.

Para evitar escribir bundle exec ... todo el tiempo, usted podría configurar un alias o función en su shell para los comandos que utiliza comúnmente con Bundler. Por ejemplo, esto es lo que uso para Rake:

$ type bake
bake is a function
bake () 
{ 
    bundle exec rake "$@"
}
 68
Author: matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-26 17:02:11

Si tiene una razón para mantener la versión actual de rake (o cualquier otra gema que esté causando el problema), matt es correcta, la mejor manera de hacerlo es ejecutar bundle exec. Esto usa la versión especificada en su Gemfile en lugar de usar la versión más reciente de la gema que ha instalado. (nathan.f77 tiene una buena solución a continuación si no desea escribir bundle exec cada vez que ejecuta rake)

De lo contrario, si no hay ninguna razón para no actualizar el rake, puede run

bundle update rake

Esto actualizará tu Gemfile.bloquear para usar la versión más reciente de rake en lugar de tener que ejecutar bundle exec cada vez.

Nota: si ejecuta solo bundle update esto actualizará todas las gemas en su Gemfile en lugar de solo rake, que probablemente no es lo que desea, porque si algo se rompe en su aplicación no sabrá qué actualización de gema lo causó.


La forma menos recomendada de mantener la versión anterior sin tener que usar bundle exec es desinstale las versiones más recientes de rake.

$ gem uninstall rake

Select gem to uninstall:
 1. rake-0.8.7
 2. rake-0.9.2
 3. All versions
> 2
Successfully uninstalled rake-0.9.2

Esto funciona, pero si está trabajando con varias aplicaciones que usan diferentes versiones de rake, esto puede ser un dolor porque se encontrará constantemente teniendo que instalar y desinstalar diferentes versiones.

 58
Author: Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:22

La última vez que me pasó esto, había actualizado todas mis gemas. Hice un gem uninstall rake y enumeró las opciones de la versión. Elegí el más nuevo, y luego ya no tuve que usar bundle exec.

Básicamente, si usas bundle exec usa cualquier versión de gema instalada por tu paquete, así que lo que hay en el Gemfile. Sin bundle exec utiliza cualquier versión por defecto de su sistema.

 13
Author: paarshad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-13 19:04:19

Ooh! El artículo de Katz es excelente!

Me gusta más esta solución:

bundle install --binstubs

, de Modo que ahora puede escribir

bin/rake .stuff.

Para alguien como yo que está desarrollando aplicaciones 2.3 y 3.0.9, esto me hace sentir mucho mejor.

 7
Author: nessur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-29 13:25:52

bundle exec es correcto, pero no querrás escribirlo todo el tiempo.

Usted puede poner esto en su .bashrc:

# Automatically invoke bundler for rake, if necessary.
rake() { if [ -e ./Gemfile.lock ]; then bundle exec rake "$@"; else /usr/bin/env rake "$@"; fi; }
 7
Author: ndbroadbent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-06 05:33:07

Intenta bundle clean --force

Elimina todas las gemas del sistema que no están en este paquete

 4
Author: Oleg Dikusar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-26 11:47:49