新手问题 [已解决] what's 'bundle exec' used for ?

xiaoronglv · 2013年08月24日 · 最后由 willmouse 回复于 2013年08月24日 · 7451 次阅读

编译assets时,为什么前面要加一个bundle exec,用途是什么?

当我运行 bundle exec rake assets:precompile --trace

** Invoke assets:precompile (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
** Execute assets:precompile

当我运行 rake assets:precompile --trace

** Invoke assets:precompile (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
** Execute assets:precompile


共收到 5 条回复

加bundle exec后你程序用的gem就都是Gemfile指定的了

stackoverflow上有个不错的回答

http://stackoverflow.com/questions/6588674/what-does-bundle-exec-rake-mean

You're running bundle exec on a program. The program's creators wrote it when certain versions of gems were available. The program Gemfile specifies the versions of the gems the creators decided to use. That is, the script was made to run correctly against these gem versions.

#1楼 @jjym

gem版本号不同,导致编译资源异常,最常见于那种情况?

#3楼 @xiaoronglv 貌似不是这么的常见..还没见过..

#3楼 @xiaoronglv 如果你用gem install rake安装了10.1.0版本的rake(假设是最新的),当你直接使用调用rake时,使用的会是这个最新版本的rake。

如果项目的Gemfile中指定的版本是0.9.6(或者是Gemfile.lock中是0.9.6)的话,你如果不加bundle exec,将会用rake 10.1.0的版本去执行本来应该由0.9.6版本的rake写出的Rake task。

会不会出问题?可能会,可能不会。因为很有可能原作者使用0.9.6版本的rake写的Rake task中没有什么被废弃的部分,10.1.10也能正确执行。但是不兼容的情况也会发生。

bundle exec就是为了解决这样的问题而存在的:在目前的Bundle环境里执行某个操作,这样对于不同的人来说,不论系统里是什么版本的Gem,总是会使用该项目Gemfile中指定的版本来执行某个操作。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册