使用bin / rake和bundle exec rake有什么区别。 哪个是首选风格?
bin/rake db:migrate
bundle exec rake db:migrate
答案 0 :(得分:3)
bundle exec
在您的应用程序上下文中执行命令。
由于每个应用程序可以使用不同版本的gem。使用bundle exec可以保证您使用正确的版本。
我总是使用bundle exec
而不是rake,因为我的系统上运行了多个应用程序。
始终尝试使用bundle exec rake db:migrate
。
答案 1 :(得分:0)
bin/rake
是来自捆绑Gems的rake命令的一种存根。它与bundle exec rake
具有完全相同的功能。有关存根的更多信息,请参阅password_hash并搜索binstubs
。还要注意bin/rake
和bin/rails
是由Rails生成的存根,它们的代码与bundler生成的存根不同。但是,它们都具有相同的用途并具有相同的功能。
答案 2 :(得分:-2)
典型系统有3个选项:
bin/rake db:migrate
rake db:migrate
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
中的宝石及其指定版本。这只有在您包含Gemfile.lock
或其父/祖父目录包含一个目录的目录中才有效。