"bundle exec rake"和"bundle exec rackup"有什么区别?rackup的执行流程从哪里开始?

4
我理解 "bundle exec" 是指示 bundler 在给定的目录和 gemfile 上下文中执行某些操作。
但是,"bundle exec rake" 和 "bundle exec rackup" 之间有什么区别呢?
此外,在 "bundle exec rackup" 的情况下,执行流程从何处开始?
2个回答

2

它们是不同的工具。

  • rake 运行使用特殊DSL定义的任务脚本。
  • rackuprack 的一部分,它是一个最小的Web服务器接口。

rackup是运行Rack应用程序的有用工具,它使用Rack::Builder DSL配置中间件并轻松构建应用程序。 rackup自动确定它运行的环境,并将您的应用程序作为FastCGI、CGI或WEBrick运行——所有这些都来自同一个配置。

要运行Rack应用程序,您可以将其路径作为参数传递: bundle exec rackup yourapp.ru 或创建config.ru文件与您的应用程序初始化,然后只需运行bundle exec rackup

这是最小的Rack应用程序:

run ->(env) { [200, {'Content-Type' => 'text/html'}, ['Hi Mugen']] }

更新

正如@tadman在下面的评论中提到的那样,bundle exec只是加载Gemfile中的内容并准备环境。此外,根据您的设置,您可以在不使用bundle exec命令的情况下运行rakerackup


1
值得解释的是,bundle exec 只是加载 Gemfile 中的内容,并在运行下一条命令之前准备好 Ruby 环境。 - undefined
非常感谢您的回复,但很遗憾我觉得这个答案太复杂了。例如,“task scripts”和“DSL”这些术语并不清楚。我的意思是rake使用用DSL编写的任务脚本。好吧,但是这并不清楚它具体做什么。“rackup”是“rack”的一部分,而“rack”是一个运行Rack应用程序的有用工具 - 这仍然不清楚。如果有人能将这个答案简化成一个适合五岁孩子理解的解释,那就太好了。 - undefined
你可以跟随我提供的链接,那里有比我能在回答中提供的更多信息。 - undefined

2
我在这里看到四个重叠的问题:
  • 什么是 bundle exec <whatever>
    • ...它类似于:
      • /usr/bin/<whatever> ...或...
      • /usr/bin/env <whatever>
    • exec 是 bundle 的关键字,被其理解
    • bundle exec 后面的 <whatever> 只是一个名称
    • bundle exec 准备一些东西,然后尝试运行 <whatever>
  • rakerackup 有什么共同点?
    • 它们是两个无关的工具,碰巧都是用 Ruby 编程的
    • 它们都可以安装在标准的 Ruby 生态系统中...
    • ...因此可以通过 bundle exec ... 来启动
  • rake 是做什么的?
    • 它是一个类似于 make 的工具
    • 它可以被用来启动 C 编译器编译一些代码
    • ...像 make 一样,它从一个使用 rake 特定语言编写的文件中获取指令
  • rackup 是做什么的?
    • 它启动一个(预安装的)具有特定配置的 web 服务器
      • ...这将导致在每个 HTTP 请求上调用简单的 Ruby 方法
    • 它依赖于...
      • 已安装的 web 服务器(从支持的服务器池中选择之一)来处理 HTTP
      • rack,将
        • 解释的请求转换为简单的方法调用 ...和...
        • 返回值转换为 web 服务器可以理解的适当响应
    • 如果不带参数调用
      • 它将使用当前工作目录中的文件 config.ru
      • ...并使用其中包含的符合 rack 标准的 Ruby 代码来服务请求

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接