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

PRN*_*PRN 14 ruby-on-rails

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

bin/rake db:migrate
bundle exec rake db:migrate
Run Code Online (Sandbox Code Playgroud)

Tus*_*roo 5

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

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

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

您可以在这里了解更多信息官方文档


小智 -1

在典型系统上您有 3 个选项:

  1. bin/rake db:migrate
  2. rake db:migrate
  3. bundle exec db:migrate

第一个选项只是调用程序的路径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加载您的 gem 及其指定版本。仅当您所在的目录包含 ,Gemfile.lock或者其父/祖父目录包含 时,此功能才有效。

  • “与大多数系统上的第一个相同” - 我非常怀疑这一点(大多数系统都有这个别名)。相反,裸露的“rake”将从全局 gem 列表中调用它,而不是从该应用程序的捆绑包中调用。 (2认同)