产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

驾驭新的 Ruby Web 框架 Waves

  • 2008-03-05
  • 本文字数:3820 字

    阅读完需:约 13 分钟

Ruby 的流行引领了 Ruby on Rails、Merb 和 Camping 等一批 Web 框架的诞生。最近一个新的 Web 框架 Waves 正式发布,它的一些特性吸引了 Ruby 开发者们去试上一试。

Waves 同 Ruby on Rails 一样是一个 MVC 框架,采用了被称为 Request Lambdas 的技术,即由规则和代码块来组成映射。当一个规则匹配了一个请求时,相应的代码块就会运行。这只是 Waves 独有的特性之一。

Waves 其他迷人的特性包括:

  • 真实代码重载
  • 热补丁
  • 集群支持
  • 线程安全

InfoQ 有幸和 Waves 的创始人 Dan Yoder 一起聊聊这个框架。

Robert Bazinet (RB): Waves 究竟是什么呢?

Dan Yoder (DY): Waves 是基于 MIT 证书发布的下一代 Web 应用框架。基本上说,它实现了 Rails 所没有做到的,这也是让它成为“下一代”的原因。这其中的一些很基 本,包括线程安全和更节省资源等等。有些特性利用 JITR(Just In Time Resources)这样的技术来将 DRY 带到了一个更高的层次,可以让你很轻松的实现跨应用的 MVC 代码重用,甚至重用整个应用(因为应用被封装在模块 之中)。Waves 更加开发,也更加易于扩展。例如,你可以很容易编写自己的视图类来改变视图选择和渲染的方法,或者为模型换用另一个数据库平台(默认的 Ruby 的 Sequel)。它的基本思路和 Rails 相同——用 Ruby 实现 MVC 的 Web 应用,但是它建立在我数年使用 Rails 的经验之上,这让我可 以创造出一个更加强大的框架。

RB: 你为什么要创建它?

DY: 简而言之,是 Camping。

说的再详细一些,主要是因为我在编写 Rails 应用的时候遇到了一些很难逾越的限制。Waves 实际上一开始只是一个扩展插件集合。然后,我都不知 道什么时候我才能够发布它们,因为实际上我发现我就是在 Rails 之上重新构建一个新的框架。比起普通的插件来说,它更加现代化。我同时也发现我在 Rails 代码上的修修补补,本质上是改变了框架预期的行为,所以这样就没必要再和其他的 Rails 部分搞在一起了。一个很明显的例子就是我最初实现的 Just In Time Resources:ActiveDependency 重写(override)了对象和模块中的 const_missing 方法来处理代码重载。我想要 修改这个行为,于是我不得不再重写 Rails 的做法。我并不喜欢这个解决方案,因为我完全可以不需要去碰对象或者模块,但是由于 Rails 这样做了我也只 能这样做。

直到有一天我发现了 Camping。原因我不记得了,我只记得我对其代码的简明大为惊奇。有一种醍醐灌顶的感觉,如果只是简单的创造一个新的框架, 有我要的那些特性,而不需要再围着 Rails 转。这是一个艰难的决定,因为我的原计划是为 Rails 编写插件,这比起写一个框架要容易多了。而且,我需要 重写很多代码。这让人很痛苦。但是最终我认为代码会变得更精益、更易于扩展和使用。来自 DuckTyped.com 的 Ben 向我推荐了 Rack,我当时正在锤炼代码,于是就采纳了。与此同时,DataMapper 和 Sequel 也逐渐成熟, 这些都可以让制作一个全特性的、能够完全专注于 Web 应用的 MVC 部分的框架成为可能。

RB: Waves 框架已经开发了多长时间?

DY: 我在 07 年的八月才开始开发 Waves。第一个 beta 发布版是在今年 2 月初。所以这是一个非常年轻的框架,一切才刚刚开始。我是个老学究:beta 对我来说就是“还不能实际投入应用”。

RB: 对于开发者来说,怎样才能更好地去尝试通过 Waves 来开发应用?

DY: 有个教学视频可能是最好的起点,你可以跟着这样一个指导来发挥你的想象力。当然 RDocs 也是一个好途径。也有一个支持论坛,我会尽量在几个小时、最多一 天以内回答任何问题。综上来说,你可以从教程开始玩转 Waves,关注 RDocs 和论坛,如果你有了麻烦可以去论坛问问题。

RB: Waves 和 Rails 一样是一个 MVC 框架,和 Rails 相比 Waves 有什么不同呢?

DY: 非常多的不同。正如我说的,它是“下一代”的,是 Rails 的进化版。它线程安全,而且更节省资源。它更关注与重用,包括应用程序和它们之间的:JITR 或者通过模块封装的应用等等。路由的等价是 Request Lambdas,是非常强大的,可以为 MVC 添彩不少。它们可以允许你在一个地方加固所有的控制器的安全性。模型可以绑定任何你想要的 ORM 框架,但是如 果你不需要的话,你也不比为非要使用一个而付出内存和性能的开销。例如,我有一个基于 Waves 的 CMS,采用的是文件存储,那就不需要 ORM。 Waves 拥有顶级试图,和 Waves 中的控制器基本上没有耦合。拿布局来说,是制定在试图本身内而不是在控制器中的。类似的,你可以在试图中绑定布局或 引入控制器方法。另一个很关键的不同是 Waves 支持真实代码重载。这就是说,代码可以在重载前自动卸载,这样上次加载的产出就不会留下来。这样的好处不 光是可以让 debug 更加容易,还可以使你可以通过 LiveConsole 对产品代码做热补丁。这是一个很好的例子来说明不同点。它确实是 Ruby 下的一 次 MVC 革新。

RB: 是那么类型的站点是基于 Waves 的?

DY: 我有一个已经发布的 CMS 为很多站点提供了支持,当然也包括 Ruby Waves 的站点 RubyWaves.com 本身。还有一个我通过 Waves 实现的主题建设的应用程序。它们最初都是运行在 Rails 上的,现在它们都运 行在 Waves 上。它们的内存占用只是以前的三分之一到四分之一,而且代码比起 Rails 来也更少了。它们稳定的运行了数周。对此我颇受鼓舞。我希望从别 人那里再看到一些数据相关的应用。希望可以很快很到。

RB: Waves 是开源的吗?如果是的话,开发者们如何参与?

DY: Waves 是基于 MIT 证书的,可以自由的得到。我也非常希望有核心参与者加入来帮助 Waves 前进。想要参与进来的第一步就是在支持论坛中找到我并让我 知道你希望做哪类工作。目前非常欢迎参与进来。目前有成堆的事情要做,而且我不认为 Waves 或者任何其他重要的框架是可以离开社区的开发还能取得成功 的。Waves 已经站在了 Rack、Sequel 和 Markaby 的肩头,从中取得了巨大的收益。很多工作已经被这些优秀的开源产品所简化了。这使得 Waves 可以非常非常专注于提供 MVC 接合。但是依然能有很多机会可以让它更好。

RB: Waves 是线程安全的,你可以解释一下吗?

DY: Waves 支持每请求一个线程的模型,在处理请求的时候引入信号量来做到不同的线程之间不会影响对方。因为 Waves 支持集群,并使用了 Rack。这并不 是被支持的唯一一个模型,但是我认为它很重要,给了开发者选择的机会,特别是当 Ruby 1.9 将会支持原生操作系统线程以后。目前,在 Ruby 社区中线程还不是很火,但是一旦原生线程支持了以后,我断定它们会因为运行更快而迎来回归。收益是 你可以通过增加你的应用运行的实例来提高性能,特别是在那些带有并行架构的、对线程支持良好的机器上。而 Waves 可以让这些变得简单。

RB: 鉴于 Ruby 1.9 已经支持“原生”线程,你是如何看待和 Ruby 1.9 一起工作的?

DY: 我很清楚目前 Waves 不支持 1.9。然而,这是 Waves 前进的一个主要的目标。并不只是因为 1.9 拥有太多迷人的特性可以让 Waves 享用,显然还因 为线程安全可以让 Waves 在 1.9 上做到性能的飞跃。这是我并不过分担心性能的原因之一,然而例如 Merb 社区就会。另外下一个发布版你将会可以让 Waves 精简运行以获得更好的性能。但是我认为当我们转向 1.9 将会越来越有趣。

RB: 你对 JRuby 支持的态度是什么?Waves 使用的 Sequel 并非 100% 支持 JRuby 吧?

DY: 这可能在路线图上排在 1.9 支持以后,但是我愿意接受建议。我要指出的是 Waves 并不支持 Sequel,它只是新应用的默 认而已。但是现在我相比性能来更注重的是特性,所以 JRuby 优先级并不高。我很喜欢 Sequel 中的特性,这个例子真不错。希望在 Waves 的关键库迁 移到 1.9 以后 JRuby 会排上日程。再重复一遍,Ruby 社区的反馈会改变这些,尤其是有人愿意贡献。(暗示,暗示!)

RB: 能说说一些你对 Waves 计划的细节吗?

DY: 好的。首先,我已经从社区中获得了很多建议,包括增加对 Tenjin、Haml 和 Sass 模板库的支持以及一个轻量级 Web 服务器,这些很快就会实现。另 外,还有一个对集群支持的 bug 修复。我还计划添加目前缺乏的对数据库后端会话的支持,还有增强 Request Lambdas 等等。

对于 Waves 需要做出很大努力在增强模式(Schema)反射能力上。目前这还是 Sequel 和 DataMapper 的弱点。我希望 Waves 可以拥有一些 ORM 独立模式的概念,因为我认为反射是扩展 JIT 到试图的关键。

我需要指出的是什么才是测试的默认方法。我使用过很多方法而且很喜欢 RSpec,但是我犹豫该不该将它加入默认 Waves 应用之中,因为在 Ruby 社区中目前关于测试有太多其他的选择。对 Sequel 的选择决定就简单多了,因为它支持迁移和 Ruby 表达式作为查询,我认为都是很酷的特性。但是我没有 信心把 RSpec 作为默认,所以在这个问题上也欢迎社区的反馈。

我也开始做性能方面的工作,最初做了些基准测试和性能测试来看看问题出在哪里。真的,这里有很多很多有趣的事情去做。我认为 Waves 已经很酷了,但是那些酷的部分恰恰有很多可做之处。这还只是冰山的一角而已。我维护着一个路线图的单元列表,目前还只是初期阶段,地址在 http://rubywaves.com/roadmap ,如果感兴趣的话可以在这里得到更多的细节。

RB: Dan,感谢你抽出时间和我们聊 Waves。

Waves 官方站点有一个创建blog 的多章节教程。我曾经试图安装Waves 并跟随教程来做,它就和所说的那样工作良好并创建了一个相当不错的应用。还有一个跟随教程的视频教学。其他关于Waves 的信息可以在 Waves 的站点上找到。

查看英文原文: Riding the Waves of a new Ruby Web Framework

2008-03-05 21:191338
用户头像

发布了 80 篇内容, 共 19.9 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

架构训练营模块九作业

现在不学习马上变垃圾

架构训练营10期

小度沈健:以闭环服务赋能场景化智能家居

Geek_2d6073

初学React useEffect Hook

devpoint

React useEffect

基于PaddleOCR的多视角集装箱箱号检测识别

汀丶人工智能

人工智能 计算机视觉 图像识别 OCR识别

运维进阶训练营 -W13H

赤色闪电

设计电商秒杀系统

Geek_e5f2e5

【被夸爆的教学!】ChatGPT注册全攻略!新手必看!省时省力又省心!

frank

ChatGPT

WorkPlus SE专业版即时通讯IM办公平台,赋能中小企业数字化转型

WorkPlus

类似钉钉和企微的企业IM,为什么说私有化部署是企业更好的选择?

WorkPlus

推荐一款多功能的跨平台小程序管理工具

FinFish

小程序容器 小程序管理平台 小程序技术 小程序管理

StyleGAN 调整面部表情,让虚拟人脸更生动

极客飞兔

人工智能 机器学习 图像处理 StyleGAN

沐曦与百度飞桨完成兼容性测试,助力计算机视觉应用发展

飞桨PaddlePaddle

菜单(Menu)

梦笔生花

android 控件 menu

快速解决 Linux 内核问题,一站式运维工具 oc-ops 介绍

OpenCloudOS

Linux 开源 操作系统

分片压缩、分片上传,融云 IM 视频文件高速传输方案

融云 RongCloud

视频 IM 方案

4月7日|《2022中国企业敏捷实践白皮书》发布会,揭秘国内敏捷最新现状

爱吃小舅的鱼

敏捷实践 中国企业敏捷实践白皮书

运维进阶训练营 -W11H

赤色闪电

运维进阶训练营 -W16H

赤色闪电

Dubbo Triple 异常处理

昵称不能为null

dubbo triple协议 dubbo异常处理

火山引擎EMR StarRocks场景案例分享

字节跳动数据平台

EMR

运维进阶训练营 -W14H

赤色闪电

运维进阶训练营 -W18H

赤色闪电

运维进阶训练营 -W19H

赤色闪电

地表最强AI,GPT-4专治各种不服

引迈信息

AI ChatGPT

2022 年云原生安全现状报告

York

容器 云原生 安全

运维进阶训练营 -W12H

赤色闪电

很强,我终于找到绘制E-R图的正确姿势

JAVA旭阳

Java 数据库

运维进阶训练营 -W15H

赤色闪电

运维进阶训练营 -W17H

赤色闪电

【云原生 • Docker】用故事给老板讲Docker核心原理

Reactor2020

云原生 ,docker linux namespace

驾驭新的Ruby Web框架Waves_Ruby_Robert Bazinet_InfoQ精选文章