ruby-on-rails - rails 和 rake 有什么区别?

标签 ruby-on-rails ruby

Ruby 中的命令 rakerails 有什么区别?

哪个更快,为什么?

最佳答案

区别在于调用的是什么二进制文件。

如果您要在 Rails 应用程序根目录中调用 bundle exec which rake,您会得到类似 /home/[USERNAME]/.rbenv/versions/2.5.5 的内容/bin/rakebundle exec which rails,你会得到 /home/[USERNAME]/.rbenv/versions/2.5.5/bin/rails。从那里你可以 cat (cat/home/[USERNAME]/.rbenv/versions/2.5.5/bin/rake) 这两个路径并查看类似的代码为每个运行,但文件的末尾不同。

rails

gem "railties", version
load Gem.bin_path("railties", "rails", version)

rake

gem "rake", version
load Gem.bin_path("rake", "rake", version)

这里他们都在 Gem.bin_path 上调用 load 但使用不同的参数,它们试图加载单独的 gem。您可以通过运行进一步跟踪代码一个 irb/pry/rails 控制台,并设置所需的 require 'rubygems'version = ">= 0.a",然后运行 ​​Gem.bin_path ("railties", "rails", version)Gem.bin_path("rake", "rake", version) 查看 load 是什么实际上试图运行。我承认,在您遇到最终确定传递给 rails 的 rake 任务参数并将其代理到 Rake 并停在那里并推迟的逻辑之前,我承认它会变成一个兔子洞至 this SO answer剩下的。

rails 运行并传递了本应由 rake 运行的参数时,它将首先尝试查找它是否是要提供给的实际参数rails 命令,确定它不是,然后尝试将其作为 rake 命令运行,以简化 Rails 团队在 Rails v4 中添加的整体命名。

那么哪个跑得更快? rake 用于实际的 rake 任务,因为它会绕过需要确定正在传递 rake 参数的额外逻辑。但 rails 特定参数也不能与 rake 一起运行,例如bundle exec rake generate 将不起作用(除非您有一个 generate 任务)。如果有疑问,运行 bundle exec rails --help 至少在 Rails v5 中,它会输出哪些参数是 rails 特定的,哪些是 rake具体。

关于ruby-on-rails - rails 和 rake 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66311919/

相关文章:

css - 如何将样式表应用于查看页面

ruby-on-rails - ruby 中 2 个矩阵之间的点积,最有效的方法

ruby-on-rails - 禁用特定操作的强参数

ruby-on-rails - 如何检查准备好更新的 gem ?

ruby-on-rails - 我不断收到 "Not found. Authentication passthru"用于使用 Devise 连接登录的 Facebook - 需要调试建议

ruby-on-rails - 显示从数据库中获取的数据时是否应该调用 escape_javascript

ruby - 强制 RSpec 3 显示单行字符串的差异?

ruby-on-rails - 画出模型和 Controller 之间的界限

ruby-on-rails - 在 jsonb 列中搜索查询

ruby-on-rails - 从错误日志中删除 Assets 加载