Que bundle exec rake db:migratesignifica ¿O solo bundle exec rake <command>en general?
Entiendo que bundlese encarga de mantener las cosas en el Gemfile. Sé lo que significa la palabra "ejecutivo". Entiendo que rakemantiene todas las cosas diferentes que puedes hacer, y sé que db:migratees una de esas. Simplemente no sé qué hacen todas estas palabras juntas. ¿Por qué debería bundleusarse para ejecutar rakepara ejecutar una migración de base de datos?
fuente

bundlees el comando que utiliza Bundler..ruby-gemsetarchivo en la raíz de su proyecto. También hay un.ruby-versionarchivo que establece su versión de ruby si usa RVM.Estás ejecutando
bundle execun programa. Los creadores del programa lo escribieron cuando ciertas versiones de gemas estaban disponibles. El programa Gemfile especifica las versiones de las gemas que los creadores decidieron usar. Es decir, el script fue hecho para ejecutarse correctamente contra estas versiones de gemas.Su Gemfile de todo el sistema puede diferir de este Gemfile. Es posible que tenga gemas más nuevas o más antiguas con las que este script no funciona bien. Esta diferencia en las versiones puede darte errores extraños.
bundle execLe ayuda a evitar estos errores. Ejecuta el script usando las gemas especificadas en el Gemfile del script en lugar del Gemfile de todo el sistema. Ejecuta ciertas versiones de gemas con la magia de los alias de concha.Ver más en la página del manual .
Aquí hay un ejemplo de Gemfile:
Aquí,
bundle execejecutaría el script usando rails versión 2.8.3 y no alguna otra versión que pueda haber instalado en todo el sistema.fuente
rake db:migratecorriendobundle exec, ¿se ejecutaría usando un Gemfile en todo el sistema donde uno puede tener un rack en 1.5.2 (más reciente)?bundle executiliza las gemas locales "específicas de la aplicación" en su Gemfile de su aplicación, ybundleutiliza las gemas globales "específicas de la máquina" si lo hizogem install a_certain_gem. local vs globalEsto surge mucho cuando su gemfile.lock tiene diferentes versiones de las gemas instaladas en su máquina. Puede recibir una advertencia después de ejecutar rake (o rspec u otros) como:
You have already activated rake 10.3.1, but your Gemfile requires rake 10.1.0. Prepending "bundle exec" to your command may solve this.El antecedente
bundle execle dice al agrupador que ejecute este comando independientemente de la versión diferencial. No siempre hay un problema, sin embargo, puede tener problemas.Afortunadamente, hay una gema que resuelve esto: rubygems-bundler.
$ gem install rubygems-bundler$ $ gem regenerate_binstubsLuego prueba tu rastrillo, rspec o lo que sea de nuevo
fuente
Probablemente debería mencionarse que hay formas de omitir
bundle exec(todas se mencionan en el capítulo 3.6.1 del libro Tutorial Ruby on Rails de Michael Hartls ).Lo más simple es usar una versión suficientemente actualizada de RVM (> = 1.11.x).
Si está restringido a una versión anterior de RVM, siempre puede usar este método también mencionado por calasyr :
El
bundler_stubsdirectorio también debe agregarse al.gitignorearchivo.Una tercera opción es usar la
rubygems-bundlergema si no estás usando RVM:fuente
Cuando ejecuta directamente la tarea de rastrillo o ejecuta cualquier archivo binario de una gema, no hay garantía de que el comando se comporte como se esperaba. Porque puede suceder que ya tenga la misma gema instalada en su sistema que tiene una versión que dice 1.0 pero en su proyecto tiene una versión más alta que dice 2.0. En este caso, no puede predecir cuál se utilizará.
Para imponer la versión de gema deseada, toma la ayuda del
bundle execcomando que ejecutaría el binario en el contexto del paquete actual. Eso significa que cuando usa bundle exec, bundler comprueba la versión de gema configurada para el proyecto actual y la usa para realizar la tarea.También escribí una publicación al respecto que también muestra cómo podemos evitar usarlo usando los apéndices bin.
fuente
No he usado
bundle execmucho, pero lo estoy configurando ahora.He tenido casos en los que se utilizó el rastrillo incorrecto y se perdió mucho tiempo rastreando el problema. Esto te ayuda a evitar eso.
A continuación, le mostramos cómo configurar RVM para que pueda usar
bundle execde manera predeterminada dentro de un directorio de proyecto específico:https://thoughtbot.com/blog/use-bundlers-binstubs
fuente
Significa usar el rastrillo que el agrupador conoce y forma parte de su Gemfile sobre cualquier rastrillo que el agrupador no conozca y ejecute la tarea db: migrate.
fuente