bundle exec rake db:migrate
是什么意思?还是一般来说只有bundle exec rake <command>
?
我知道bundle
负责维护GEM文件中的内容.我知道"exec"这个词的意思.我知道rake
维护着你能做的所有不同的脚本,我知道db:migrate
就是其中之一.我只是不知道这些词在一起干什么.为什么要用bundle
来执行rake
来执行数据库迁移?
bundle exec rake db:migrate
是什么意思?还是一般来说只有bundle exec rake <command>
?
我知道bundle
负责维护GEM文件中的内容.我知道"exec"这个词的意思.我知道rake
维护着你能做的所有不同的脚本,我知道db:migrate
就是其中之一.我只是不知道这些词在一起干什么.为什么要用bundle
来执行rake
来执行数据库迁移?
bundle exec
是一个Bundler命令,用于在当前Bundle 包的上下文中执行脚本(来自目录的Gemfile).rake db:migrate
是脚本,其中db是名称空间,migrate是定义的任务名称.
因此,bundle exec rake db:migrate
在当前包的上下文中使用命令db:migrate
执行rake脚本.
至于"为什么?"我将引用bundler page句话:
在某些情况下,如果可执行文件恰好安装在您的系统中,并且没有引入任何与Bundle 包冲突的gem,那么运行不带
bundle exec
的可执行文件可能是可行的.然而,这是不可靠的,也是相当大的痛苦的根源.即使它看起来可以工作,但将来或在另一台机器上也可能无法工作.