这个文件 config.ru 是什么,它有什么用?

What is this file config.ru, and what is it for?

这个文件是什么 config.ru,它在 Sinatra 项目中有什么用?在我的项目的挂绳里,写着这样的代码:

require './app'
run Sinatra::Application

config.rurackup command with a list of instructions for Rack.

的默认配置文件

Rack 是一种界面和架构,它提供领域特定语言 (DSL) 并将应用程序与网络世界连接起来。简而言之,它允许构建 Web 应用程序并以最方便的方式处理请求、响应(以及许多其他与 Web 相关的技术)。

Sinatra 和 Rails 都是 web 框架,所以他们都使用 Rack:

http://recipes.sinatrarb.com/p/middleware

https://guides.rubyonrails.org/rails_on_rack.html

config.ru 是一个 Rack configuration file (ru stands for "rackup"). Rack provides a minimal interface between web servers that support Ruby and Ruby frameworks. It's like a Ruby implementation of a CGI,它为 Web 服务器执行程序提供了一个标准协议。

Rack 的 run 命令在这里意味着对服务器的请求,使 Sinatra::Application 可以使用 Sinatra 的 DSL 的执行上下文。然后 main 上的所有 DSL 方法都委托给这个 class.

所以在这个 config.ru 文件中,首先需要使用 Sinatra 的 DSL 的 app 代码,然后 运行 Sinatra 框架。在 Sinatra::Application 的上下文中,如果您的 app.rb 包含以下内容:

get '/' do
  'Hello world!'
end

get 块对 Rack 来说意味着一些东西,在这种情况下,当有人试图访问 (GET) 家 url 时,发回 'Hello world!'

Rack 在支持 Ruby 和 Ruby 框架的网络服务器之间提供最小接口。

接口只是假定您有一个 object 响应调用方法(如 proc)和 returns 一个数组:

  • HTTP 响应代码
  • headers
  • 的哈希值
  • 回复body,必须回复每个

您可以使用 rackup 命令 运行 一个基本的 Rack 服务器,它将在当前目录中搜索 config.ru 文件。

您可以创建一个最小的 hello world 服务器:

# config.ru
run Proc.new { |env| ['200', {'Content-Type' => 'text/html'}, ['Hello World']] }
# run this with the `rackup` command

因为 Sinatra 就像 Rails 建立在 Rack 上一样,它在内部使用 rackup 作为服务器和框架之间的接口。 config.ru 因此是任何基于 Rack 的程序的入口点。

它所做的是 bootstrap 应用程序并将 Sinatra::Application class 传递给具有 call class 方法的机架。

Sinatra::Application 然后负责获取传入请求(env)并将其传递给应用程序提供的路由,然后传回响应代码 headers 和响应 body.