在没有框架的情况下在Ruby中创建Web应用程序

Sin*_*bar 10 ruby web-applications

我想在Ruby中构建一个Web应用程序,但我不知道是否可以在不使用框架的情况下这样做.我不知道为什么大多数Ruby开发人员使用像Rails或Sinatra这样的框架.

如何设置不基于现有框架的Ruby Web应用程序?

Sho*_*hoe 82

是否可以在不使用框架的情况下在ruby中创建Web应用程序?

太长; 没看过

是的,这绝对是可能的.大多数Ruby框架都是在其他中间件库(如Web服务器接口)之上使用纯Ruby构建的.

Ruby和Web

Ruby是一种通用语言; 因此它不是专门为Web开发而设计的.例如,PHP是一种用于创建Web应用程序的语言.在Ruby中,您将需要一些库来正确处理HTTP头和Web特定元素.

例如,在Python中,(另一种通用编程语言)我们有一个名为WSGI(Web服务器网关接口)的标准Web服务器接口规范.实现WSGI规范的每个服务器都称为WSGI兼容.任何兼容WSGI的服务器都可以以相同的方式运行相同的WSGI Python脚本.

在谈到Ruby时我为什么要告诉你这个?因为Ruby有一个非常类似的概念WSGI,可能的例外,它是不是还没有一个标准.它的名字是Rack,它提供了一个接口,用于处理您不想自己处理的常见低级HTTP/Server内容,以便我们可以像使用PHP一样使用Ruby .

Ruby,Rack和Apache

让我们来看一个真实的例子:Apache.Apache是​​最常见的Web服务器之一.PHP如何与Apache一起工作?随着mod_php.Python WSGI兼容的应用程序如何与Apache一起使用?随着mod_wsgi.Ruby Rack兼容的应用程序如何与Apache协同工作?随着mod_rack.你能看到这里的模式吗?Web服务器需要知道如何将您的应用程序正确链接到请求/响应Web上下文.

机架示例

在这个抽象的演讲中没有进一步处理,让我们关注一个例子:

class HelloWorld
    def call(env)
        [200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
    end
end
Run Code Online (Sandbox Code Playgroud)

这个例子由Rack网站提供,它解释了Rack兼容脚本的运行方式:

  • 您安装rack在您的Web服务器上(您将在Web服务器上找到大量关于Google的教程)
  • 您创建一个config.ru在根文件夹文件(.ru大部分红宝石)
  • 您粘贴该脚本
  • 你用这个run方法运行它

Etvoilà,我们有一个Web服务器界面.的env哈希值包含从当前请求和要返回的数组中的环境变量包含3个组分:

  1. 响应状态.200代表"一切都好".404代表"未找到".等等.
  2. HTTP标头.这些描述了响应体.它的长度.它的内容.等等.
  3. 响应机构.这包含应用程序的实际输出.HTML,JSON,XML,HXML,简单文本......无论如何.

例如,在PHP中,所有这些都是自动完成的.当您执行echo "Hello";响应状态时,PHP解释器会为您生成标头.

关于替代品的说明

你可以在这个领域挖掘你想要的所有东西,但是下面列出的大多数技术要么被弃用,要么被社区高度劝阻.

在Web的最初几年,有一个通用接口用于在服务器端运行Perl,Python,Ruby,C scrips:CGI或Common Gateway Interface.这是一个几乎可以被任何编程语言使用的接口,但它通常被认为很慢.

有些人认为通过加快速度来恢复这个界面.从中可以猜出,FCGI或FastCGI 出现了什么.这种技术的使用频率比您想象的要高.有些PHP脚本有时会转换为FCGI脚本,以使它们运行得更快.我不想进一步讨论这个话题,因为还有很多其他的参考资料.

最后,您可以创建自己的Web服务器.实际上,您不必使用Ruby创建Web服务器以使用Ruby.从理论上讲,Web服务器就像:

  1. 在请求进入之前,请收听端口(大多数时间为80)
  2. 处理请求
  3. 输出响应
  4. 转到1

在现实生活环境中,您不希望自己为生产网站实现Web服务器.所以我绝对不鼓励这样做.

如果是,为什么大多数红宝石Web开发人员选择框架?

专业人士

框架旨在快速开发您的开发.如果你有最后期限,你不想处理低级别的东西,你会喜欢一个framework build -blog能为你管理尽可能多的无聊事物的命令,让你专注于真正的应用程序设计.

框架通常是开源的,并且具有大型社区,这有助于更快地构建框架.您可以很容易地理解,发现10,000个眼睛看到的代码中的错误比您自己编写的代码快10.000倍.

缺点

有些框架可能对您的需求而言太大,而其他框架可能太小.在Ruby环境中,有巨大的Rails及其小兄弟Sinatra.一个是巨大的,另一个是非常小的,真的很不合适.有时你想要介于两者之间.

框架通常非常通用.这意味着您必须配置对您的上下文而言显而易见的事物.

框架包含的代码多于您需要的代码.这是一个事实,你可以自己推断.这通常意味着更多的复杂性更多的错误(即使这是由他们周围的庞大社区补偿).

  • 真是个好消息!这个问题被关闭是一种耻辱,因为这值得大量赞成. (3认同)
  • 非常感谢!这真的很有用,而且一定要花很多时间写. (2认同)