age*_*217 77 rake ruby-on-rails bundler
我只使用rake命令学习了Rails rake db:migrate; 但是,我读到我应该使用bundle exec rake ...而不仅仅是普通的rake.现在我对使用哪个感到困惑.
我应该使用bundle exec rake而不仅仅是简单的rake还是仅仅是偏好的东西?任何见解都将非常感谢!谢谢!
jer*_*son 120
bundle exec 在捆绑包的上下文中执行命令.
这意味着它使用Gemfile中指定的gem.大多数情况下,运行bundle exec rake foo结果与刚刚运行的结果相同rake foo,特别是如果您在系统范围内安装了与Gemfile中相同的gems.但是,某些应用程序可能会指定不同于您在系统范围内安装的宝石版本,并且可能希望这些精确的宝石和版本能够正确运行.如果你只是没有bundle exec,你可能会得到一些奇怪的错误.
使用bundle exec保证程序与gemfile中指定的环境一起运行,这有望意味着它是程序的创建者希望它运行的环境,这有望意味着它应该正确运行,无论你有什么奇怪的设置你的电脑.
它基本上标准化了运行程序的环境.这有助于避免版本地狱,让生活更轻松.
有关详细信息,请参阅http://bundler.io/v1.3/man/bundle-exec.1.html.
$ bundle exec rake db:migrate
 
使用Gemfile中指定的rake版本来执行rake任务db:migrate.  
但是在Gemfile中没有指定rake gem!
是的,但是rake gem被安装为一些其他gem的依赖 - 看看Gemfile.lock.因此规则必须是:使用Gemfile.lock中指定的rake版本.  
但是Gemfile.lock没有指定特定版本 - 它指定的版本大于xy!
然后规则必须是:使用当前gemset中安装的rake版本.  
$ rake db:migrate
 
通常,当您在命令行上发出命令(例如rake)时,系统会在PATH环境变量中指定的目录列表中搜索该命令.包含该命令的第一个目录是使用的命令的版本.要查看哪个目录,您可以执行以下操作:
$ which rake
所以,如果你执行,
$ rake db:migrate
这可能会使用不同的宝石耙比你安装了一个bundle install.但是,即使您的系统找到相同的rake版本bundle exec,也会在项目的gemset之外的位置搜索rake源代码所需的任何gem.因此,有很多方法可以:
$ rake db:migrate
可以搞砸了.
根据Ruby on Rails教程书(免费在线),第3.6节,如果您使用的是rvm 1.11.x +,那么您不需要使用前言命令bundle exec.
| 归档时间: | 
 | 
| 查看次数: | 15146 次 | 
| 最近记录: |