下面讨论的问题是,ruby sinatra是如何和服务器进行交互的。
sinatra参照的规范是rack,rack指定了一个http 服务器如何和一个app(在sinatra中,即Sinatra::Application)进行交互。
rack协议的核心指明了一个app(在rack中称为endpoint)必须能够响应call方法的调用。而server(通常称为handler),则向这个方法传参,调用这个方法。而所传递的参数则是一个hash,其中包含了一个request的相关信息:这个请求所用的http方法,请求的path,请求头等。这个方法的预期返回是包含三个元素的数组:第一个是状态码,第二个是包含响应头信息的hash,第三个是响应体。
参照这个核心协议我们可以开发我们自己的sinatra。
module MySinatra
class Application
def self.call(env)
new.call(env)
end
def call(env)
headers = {'Content-Type' => 'text/html'}
if env['PATH_INFO'] == '/'
status, body = 200, 'hi'
else
status, body = 404, "Sinatra doesn't know this ditty!"
end
headers['Content-Length'] = body.length.to_s
[status, headers, [body]]
end
end
end
require 'thin'
Thin::Server.start MySinatra::Application, 1234
启动后,我们访问1234端口,可以得到“hi”。
分享到:
相关推荐
Ruby-Puma是一个高性能、轻量级且并发的Web服务器,专为Ruby编程语言设计。...通过深入学习Puma的源码(如压缩包中的`puma-puma-7defa31`),开发者可以更好地理解其内部机制,并根据项目需求进行定制。
4. 类主体的通用性:在 Ruby 中,类主体不局限于定义类的内部结构。它们可以看作是类本身的一个对象,允许在运行时添加、修改或执行任意代码。例如,ActiveRecord 在定义模型时,会调用诸如 `validates_presence_of`...
标签“源码”可能暗示着这篇博客会深入到Ruby的源码层面,讨论其内部机制,如垃圾回收、解析器的工作原理或是类和对象的实现。对于想要深入了解Ruby的开发者来说,这部分内容非常有价值。 总的来说,Ruby语言以其...
通过阅读源码,你可以了解到更多关于内部机制和实现细节的信息,比如任务的调度策略、事件循环、线程管理等。 总的来说,rufus-scheduler是Ruby开发者实现定时任务不可或缺的工具,它提供了一种高效、灵活的方式来...
- **块**: Ruby中独特的概念之一,可以作为参数传递给方法,并在方法内部执行。 - **模块**: 用于组织代码,可以包含类方法和实例方法,也可以被混入到其他类中以实现继承的效果。 #### 四、Ruby高级特性 ##### ...
- **定义与特点**:RUBY是一种面向对象的脚本语言,简洁而强大,由日本人松本行弘(Yukihiro Matsumoto)在1995年设计并开发。RUBY语言结合了Perl语言的强大功能和Smalltalk语言的面向对象特性。 - **语法特点**:...
Ruby社区提供了大量的开源项目和框架,如Rails用于Web开发,Sinatra作为轻量级的Web框架,以及各种测试工具和自动化工具,如RSpec和Capistrano。 总的来说,Ruby-1.9.3作为Ruby的一个关键版本,不仅在功能和性能上...
它基于Sinatra,一个微型的Web应用框架,但增加了更多的结构和功能,特别适合于构建RESTful服务。 Pliny的主要特点包括: 1. **中间件支持**:Pliny允许开发者使用和编写中间件来处理请求和响应。中间件可以用来...
Rack的另一个重要特性是它的中间件机制。中间件是一种插件式的设计模式,允许开发者在应用的请求/响应链中插入自定义的处理逻辑。这些中间件可以用于日志记录、错误处理、安全性增强、性能优化等多种用途。通过这种...
它优化了内部机制,使得代码执行速度更快,内存管理更有效。这包括对垃圾回收算法的改进,减少了不必要的内存占用,以及对常用操作的底层优化,如数组和哈希表的处理。 其次,Ruby 2.7.2引入了块参数解构赋值的功能...
这段描述说明Frankie的诞生目的是作为一个学习工具,帮助开发者更深入地理解Sinatra的内部机制。作者通过创建这个简化版的框架,希望用户能够更容易地探索和研究Sinatra的工作方式。虽然描述中提到的博客链接缺失,...
Ruby的继承机制允许一个类继承另一个类的特性,使用`操作符指定父类。 模块(Module)在Ruby中用于实现代码复用和命名空间管理。你可以将相关的方法和常量组织在一个模块内,然后通过`include`或`extend`引入到其他...
Sinatra 是一个轻量级的 Ruby 框架,适用于快速开发 web 应用,它以简洁和模块化著称。 ### 主要知识点 1. **Sinatra 框架**: - Sinatra 是一个基于 Ruby 的微型框架,用于构建 web 应用。它的核心特性是将路由...
`Rack`则是一个更底层的接口,它定义了Web服务器如何与Web应用进行交互的规范,很多Web框架,包括`Sinatra`和`Ruby on Rails`,都是基于`Rack`构建的。 下面是一个使用`Sinatra`的简单HTTP服务器示例: ```ruby ...
JRuby,全称为Java Ruby,是Ruby编程语言的一个实现,它允许Ruby代码在Java平台上运行。与MRI(Matz's Ruby Interpreter)——Ruby的默认解释器不同,JRuby利用了Java虚拟机(JVM),为开发者提供了与Java平台无缝...
GeminaBox是一个开源的Ruby gem服务器,它允许开发者在本地或私有网络中托管gem,从而绕过公共的RubyGems.org。这对于企业内部或者需要离线开发的情况非常有用。 1. **服务器端工作原理**:GeminaBox的核心是提供一...
项目的实现可能涉及 Ruby 的标准库或第三方 gem,如 `sys-proctree` 用于获取进程树信息,`monitoring` 或 `prometheus-client` 用于度量和监控,以及 `sinatra` 或 `rails` 创建 Web 应用程序来展示监控数据。...
在实际项目中,可以结合其他Ruby库和框架,如Rails、Sinatra等,以构建强大的后端服务或Web应用。 总之,干系统是Ruby世界里一种优秀的软件设计模式,它通过组件化、依赖注入和控制反转等技术,帮助开发者遵循DRY...