使用机架

在上一篇文章中,您了解了机架是什么。现在,是时候开始使用机架并提供一些页面了。

Hello World

首先,让我们从“Hello world”应用程序开始。无论给出何种类型的请求,此应用程序都将返回状态代码200(HTTP为“OK”),字符串“Hello world”作为正文。

在检查以下代码之前,请再次考虑任何机架应用程序必须满足的要求。

Rack应用程序是响应调用方法的任何Ruby对象,采用单个哈希参数并返回包含响应状态代码,HTTP响应标题和响应体作为字符串数组的数组。

类HelloWorld
def call(env)
返回[200,{},["Hello world!"]]
end
end

正如您所看到的,HelloWorld类型的对象将满足所有这些要求。它以一种非常微小而不是非常有用的方式这样做,但它确实满足了所有要求。

WEBrick

这很简单,现在让我们将其插入WEBrick(红宝石附带的HTTP服务器)。为此,我们使用Rack::Handler::WEBrick.run方法,将其传递给HelloWorld的实例和要运行的端口。WEBrick服务器现在将运行,机架将在HTTP服务器和您的应用程序之间传递请求胃病小知识

请注意,这不是推出机架产品的理想方式。它'仅在此处显示,以便在潜入另一个名为"Rackup,"如下所示的机架功能之前运行某些东西。以这种方式使用Rack::Handler有一些问题。首先,它不是很可配置的。一切都被硬编码到脚本中。其次,正如您将注意到的那样,如果您运行以下脚本,则无法杀死该程序。它不会响应Ctrl-C。如果运行此命令,只需关闭终端风ow并打开一个新的。

#!/usr/bin/env ruby
require'rack'
class HelloWorld
def call(env)
return[200,{},["Hello world!"]]
结束
结束
机架::处理器::WEBrick.run(
HelloWorld.new,
:Port=>9000

Rackup

虽然这很容易做到,但通常不使用机架。机架通常与称为rackup的工具一起使用。Rackup或多或少地做了上面代码底部的内容,但是以更可用的方式。Rackup从命令行运行,并给出.ru“Rackup文件”。这只是一个红宝石脚本,除其他外,它将应用程序提供给Rackup。

上面非常基本的Rackup文件看起来像这样。

类HelloWorld
def call(env)
返回[
200,
{'内容类型'=>'text/html'},
[&##34;Hello world!"]
]
end
end
runHelloWorld.new

首先,我们必须对HelloWorld类进行一个微小的更改。Rackup正在运行名为Rack::Lint的中间件应用程序,该应用程序会检查响应是否正确。所有HTTP响应都应该有一个内容类型标题,以便添加。然后,最后一行只是创建应用程序的一个实例,并将其传递给run方法。理想情况下,您的应用程序不应完全写入Rackup文件中,此文件应要求您的应用程序进入其中并以这种方式创建实例。Rackup文件只是“胶水”,不应该有真正的应用程序代码。

如果你运行命令109 rackuphelloworld.ru,它将在端口9292上启动服务器。这是默认的Rackup端口。

Rackup有一些更有用的功能。首先,可以在命令行或脚本中的特殊行中更改端口等内容。在命令行上,只需输入-p port参数即可。例如:rackup-p 1337 helloworld.ru。从脚本本身来看,如果**行以#\开头,那么它的解析就像命令行一样。所以你也可以在这里定义选项。如果您想在端口1337上运行,Rackup文件的**行可以读取##\-p 1337

教育资源网_1