ruby “bundle exec rake”和“bundle exec rackup”之间有什么区别?rackup的执行流程从哪里开始?

p4rjhz4m  于 12个月前  发布在  Ruby
关注(0)|答案(2)|浏览(134)

我理解“bundle exec”是在指导编译器在给定的目录和gem文件的上下文中执行一些东西。
bundle exec rakebundle exec rackup有什么区别?
另外,在bundle exec rackup的情况下,执行流的开始是什么?

ddarikpa

ddarikpa1#

它们是不同的工具。

  • rake运行使用特殊DSL定义的任务脚本。
  • rackuprack的一部分,rack是一个最小的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']] }

UPD

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

wfypjpf4

wfypjpf42#

我在这里看到四个重叠的问题:

*什么是bundle exec <whatever>

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

相关问题