使用捆绑EXR耙或只是耙?
我学习Rails只使用rake命令,如rake db:migrate ; 不过,我读到,我应该使用bundle exec rake ...而不是简单的rake 。 现在我很困惑要使用哪个。 
 我应该使用bundle exec rake而不是简单的rake或者它只是一个偏好的东西? 任何有识之士将不胜感激! 谢谢! 
  bundle exec在你的bundle的上下文中执行一个命令。 
 这意味着它使用Gemfile中指定的gem。 很多时候,运行bundle exec rake foo的结果与刚刚运行rake foo结果相同,尤其是如果您在Gemfile中安装了与系统相同的gem。 但是,一些应用程序可能会指定与系统范围内安装的不同版本的gem,并且可能希望那些精确的gem和版本能够正确运行。 如果你只是运行没有bundle exec ,你可能会得到一些奇怪的错误。 
 使用bundle exec保证程序在gemfile中指定的环境下运行,希望这意味着程序的创build者希望它运行的环境,希望这意味着它应该能够正确运行,无论你使用什么奇怪的设置有你的电脑。 
它基本上标准化程序运行的环境。 这有助于避免版本地狱,使生活更容易。
有关更多信息,请参阅http://bundler.io/v1.3/man/bundle-exec.1.html 。
  $ bundle exec rake db:migrate 
 使用在Gemfile中指定的rake版本来执行rake任务db:migrate 。 
  但在Gemfile中没有指定耙gem! 
 是的,但一个耙gem安装作为一些其他gem的依赖 – 看看Gemfile.lock。 所以规则必须是:使用Gemfile.lock中指定的rake版本。 
  但是Gemfile.lock没有指定特定的版本 – 它指定了一个比xy更大的版本! 
 那么规则必须是:使用安装在当前gemset中的rake版本。 
  $ rake db:migrate 
 通常,当你在命令行上发出一个命令,比如rake,你的系统会在PATH环境variables中指定的目录列表中search命令。 包含该命令的第一个目录是使用的命令的版本。 要查看哪个目录,你可以这样做: 
 $ which rake 
所以如果你执行,
 $ rake db:migrate 
  可能会使用与bundle install的不同的rake gem。 但是,即使您的系统发现与bundle exec相同的rake版本,rake源代码所需的任何gem都将在您项目的gemset之外的地方被search到。 因此,有很多方法只是: 
 $ rake db:migrate 
可以搞砸了。
 根据Ruby on Rails教程手册(免费在线)3.6节,如果您使用的是rvm 1.11.x +,那么您不需要使用bundle exec命令来编写命令。 
 在没有bundle exec情况下运行任何exacutable将使Rubygems获取系统中安装的最新版本的gem。 
 通过添加bundle exec前缀代替将运行在Gemfile.lock的上下文中,这意味着将使用在gem文件中定义的版本运行。