ruby - bundler traduccion
Ya has activado X, pero tu Gemfile requiere Y (6)
Cuando ejecuto rake
obtengo este error:
Ya has activado el rastrillo 0.9.2, pero tu Gemfile requiere rastrillo 0.8.7. Considere el uso de bundle exec.
Usar bundle exec rake
lugar de simplemente rake
parece funcionar, pero ¿es la mejor manera de arreglar esto?
¡Oh! ¡El artículo de Katz es excelente!
Me gusta esta solución lo mejor:
bundle install --binstubs
para que ahora pueda escribir
bin/rake .stuff.
Para alguien como yo, que desarrolla aplicaciones 2.3 y 3.0.9, esto me hace sentir mucho mejor.
El uso de bundle exec
es la forma correcta de hacerlo.
Básicamente, lo que sucede es que actualizaste el rastrillo 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 en 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 publicación de blog .
Para evitar escribir bundle exec ...
todo el tiempo, puede configurar un alias o función en su shell para los comandos que usa comúnmente con Bundler. Por ejemplo, esto es lo que uso para Rake:
$ type bake
bake is a function
bake ()
{
bundle exec rake "$@"
}
La última vez que me pasó esto, actualicé todas mis gemas. Hice un gem uninstall rake
y enumeré opciones de versión. Escogí la más nueva, y luego ya no tuve que usar bundle exec
.
Básicamente, si usas bundle exec
, usa la versión de gem que el paquete instala, entonces, ¿qué hay en el Gemfile? Sin bundle exec
usa la versión que prefiera su sistema.
Prueba bundle clean --force
Elimina todas las gemas del sistema que no están en este paquete
bundle exec
es correcto, pero no desea escribirlo todo el tiempo.
Puedes poner esto en tu .bashrc:
# Automatically invoke bundler for rake, if necessary.
rake() { if [ -e ./Gemfile.lock ]; then bundle exec rake "$@"; else /usr/bin/env rake "$@"; fi; }
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 nueva de la gema que ha instalado. (nathan.f77 tiene una buena solución a below si no desea escribir bundle exec
cada vez que ejecuta rake)
De lo contrario, si no hay motivo para no actualizar el rake, puede ejecutar
bundle update rake
Esto realmente actualizará su Gemfile.lock para usar la versión más nueva de rake en lugar de tener que ejecutar bundle exec
todo el tiempo.
Nota: si ejecuta solo la bundle update
esto actualizará todas las gemas en su Gemfile en lugar de solo rake, que probablemente no sea lo que usted desea, porque si algo se rompe en su aplicación no sabrá qué actualización lo causó.
La forma menos recomendada de mantener la versión anterior sin tener que usar bundle exec
es desinstalar las versiones más nuevas 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 trabajas con varias aplicaciones que usan diferentes versiones de rake, esto puede ser un problema porque te encontrarás constantemente teniendo que instalar y desinstalar diferentes versiones.