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的可执行文件可能是可行的.

然而,这是不可靠的,也是相当大的痛苦的根源.即使它看起来可以工作,但将来或在另一台机器上也可能无法工作.

Ruby-on-rails相关问答推荐

Rails 7.1解决冲突的Zeitwerk Inflection规则

Rails 7.1.3如何在生产环境中查看堆栈跟踪

SASS,Rails 7:找不到要导入的样式表

仅在两个子域间共享Rails cookies,并为所有其他子域使用单独的cookie

刺激不添加侦听器以搜索表单输入

Rails 7 共享刺激控制器功能

无效的单表继承类型:Rails

Ruby 地理定位Ruby /插件

如果 URL 不存在,请将 http(s) 添加到 URL?

为什么在保存对象后使用重新加载方法? (Hartl Rails Tut 6.30)

HABTM 关系 - 如何根据关联模型的属性找到记录

设计记住我和会话

form_for 未定义的方法 `user_path'

Rails:带参数的 URL/路径

rbenv:没有 gemsets 生存

Coffeescript ||= 模拟?

rake 任务中的 def 块

您将如何解析 Ruby 中的 url 以获取主域?

Rails:如何将日期时间字符串解析为特定时区

rails 3,如何在 Settings.yml 文件中使用 ENV 配置变量?