2012-06-20 6 views

Respuesta

23

En su específica ejemplo pueden considerarse el mismo, sin embargo, en realidad, no son los mismos .

bundle exec hace algunos cambios en el entorno que bundler/setup no hace. Si su foo.rb nunca ejecuta una subshell, o nunca intenta ejecutar otros ejecutables de ruby ​​en subcapas, entonces ambas versiones son equivalentes (ambas cargarán las gemas agrupadas correctamente y funcionarán exactamente igual).

La idea con bundle exec es para que pueda ejecutar ejecutables que no fueron diseñados originalmente con bundler en cuenta. Como rspec, rails, rackup. Si su propia aplicación (foo.rb) no intenta ejecutar esos archivos ejecutables que pueden depender de sus paquetes, entonces no hay diferencia alguna. Como todo lo que desea asegurarse con bundler es que cargue las gemas correctas, y para eso bundler/setup funciona exactamente como se espera en su caso.

Desde el bundler docs cuando se habla de correr ejecutables del sistema de rubí:

En algunos casos, correr ejecutables sin exec paquete pueden funcionar, si el ejecutable que se encuentren instaladas en su sistema y no se tire en cualquier gemas ese conflicto con tu paquete.

Sin embargo, esto no es confiable y es fuente de considerable dolor. Incluso si parece que funciona, puede que no funcione en el futuro o en otra máquina.

Luego de la manpage of bundle exec puede obtener algunas pistas adicionales en cuanto a lo bundle exec hace realidad:

AMBIENTE MODIFICACIONES

  • asegurarse de que todavía es posible que desembolsar para agrupar desde dentro de un comando invocado por bundle exec (usando $ BUNDLE_BIN_PATH)
  • ponga el directorio conta ejecutables Ining (como rieles, rspec, rackup) para su paquete en $ PATH
  • asegurarse de que si bundler se invoca en el subnivel, que utiliza el mismo Gemfile (mediante el establecimiento de BUNDLE_GEMFILE)
  • añaden -rbundler/configuración a $ RUBYOPT, que se asegura de que los programas de Ruby invocados en el subnivel pueden ver las gemas en el haz

Así que si usted construye su aplicación con el apoyo bundler en mente, entonces no será necesario que bundle exec su aplicación.

Pero si es necesario utilizar otros herramientas que cargan el código de aplicación que podrían cargar gemas antes cargan el código de aplicación (que a su vez podría tirar de una joya no incluido revés), luego es necesario utilizar bundle exec.

+0

¡Gran respuesta, muchas gracias! –

Cuestiones relacionadas