在http://ruby.railstutorial.org/chapters/a-demo-app#top中看到的,使用bundle exec rake db:migrate的区别和好处是什么呢,
bundle exec 是什么意思,还可以用于其他途径吗?
这个吧从头说话比较长
首先,你得知道bundle是干啥的
简单讲bundle就是为rails项目提供一个类似沙盒机制,沙盒有很多好处啦。简单讲,能保证主要是项目依赖的gem版本,rails 3呢就从gem变成core了
然后呢,bundle exec是干啥的
bundle -h 能看到
[quote] bundle exec(1) bundle-exec.1.html
Execute a script in the context of the current bundle[/quote]
就说是为了维护工作环境,其实还是gem版本,bundle是拷Gemfile这个配置文件来维持统一的gem版本的。所以,你可以有多个项目使用相同的gem,但是不同的版本。
最后,说说你的这个例子命令里,有没有bundle exec的区别。
rake db:migrate是移植数据库啦。那么,这里实际是调用了一个rake的gem,所以,如果你的系统,如果有多个rake,比如,你系统是0.9但你在这个项目的Gemfile里写rake版本是0.8.7,项目多的时候完全可能,有些项目的有些gem版本就是没有升级。那么,写bundle exec会调用0.8.7的rake执行,不写的系统会默认调用最新的版本也就是0.9的rake。所以,也就是,有可能会出错了。
比较啰嗦凑合看