bin / rake和bundle exec rake有什么区别

时间:2015-03-22 07:47:06

标签: ruby-on-rails

使用bin / rake和bundle exec rake有什么区别。 哪个是首选风格?

bin/rake db:migrate
bundle exec rake db:migrate

3 个答案:

答案 0 :(得分:3)

bundle exec在您的应用程序上下文中执行命令。 由于每个应用程序可以使用不同版本的gem。使用bundle exec可以保证您使用正确的版本。

我总是使用bundle exec而不是rake,因为我的系统上运行了多个应用程序。

始终尝试使用bundle exec rake db:migrate

您可以在Official documentation

了解更多相关信息

答案 1 :(得分:0)

bin/rake是来自捆绑Gems的rake命令的一种存根。它与bundle exec rake具有完全相同的功能。有关存根的更多信息,请参阅password_hash并搜索binstubs。还要注意bin/rakebin/rails是由Rails生成的存根,它们的代码与bundler生成的存根不同。但是,它们都具有相同的用途并具有相同的功能。

答案 2 :(得分:-2)

典型系统有3个选​​项:

  1. bin/rake db:migrate
  2. rake db:migrate
  3. bundle exec db:migrate
  4. 第一个选项是简单地调用rake程序的路径,该程序的启动程序可以在隐藏的/bin文件夹中找到。此启动器通常只是您/.rvm目录中程序内容的符号链接。您可以通过执行$ which rake找到原始位置,这样会为您提供/home/ubuntu/.rvm/gems/ruby-2.2.3-p481@devonzuegel/bin/rake

    默认情况下,第二个选项与大多数系统上的第一个选项基本相同。这就是所谓的别名,它基本上只是其他程序的简写命令。这在shell设置中的某处定义为alias rake='/bin/rake'。这个别名可能指向你机器上的不同程序,所以在接受我的话之前先检查一下。

    当您使用bundle exec时,您告诉捆绑商确保只加载Gemfile.lock中的宝石及其指定版本。这只有在您包含Gemfile.lock或其父/祖父目录包含一个目录的目录中才有效。