新功能发布,Contrib 和 Recipes

作者:Konstantin Haase,发布于 2011 年 9 月 30 日星期五

我们很自豪地宣布今天发布了两个新版本:1.3.0 和 1.2.7。我们还同时发布了 sinatra-contrib,并正式宣布最近推出的 Sinatra Recipes 项目。继续阅读以了解更多精彩内容!

Sinatra 1.3.0

我们发布了一个新功能版本!

从我们的角度来看,最大的新增功能之一是流式 API。一个简单的版本直接与 Sinatra 配合使用,并在 sinatra-contrib 中扩展。原始版本如下所示

get '/' do
  stream do |out|
    out << "It's gonna be legen -\n"
    sleep 0.5
    out << " (wait for it) \n"
    sleep 1
    out << "- dary!\n"
  end
end

它的妙处在于它抽象了所有不同 Rack 服务器之间的差异,无论这些服务器是事件驱动的(如 Thin、Rainbows! 或 Ebb)还是顺序的(如 Unicorn、Passenger 或 Mongrel)。目前只有 WEBRick 存在问题(您将一次性获得响应主体),但我们正在研究这个问题。

真正有趣的是:如果您在事件驱动的服务器上运行,例如 Thin,您可以保持连接打开,并轻松实现消息服务、服务器发送事件等

set :server, :thin
connections = []

get '/' do
  # keep stream open
  stream(:keep_open) { |out| connections << out }
end

post '/' do
  # write to all open streams
  connections.each { |out| out << params[:message] << "\n" }
  "message sent"
end

值得一提的是,所有这些都在没有纤维的情况下完成(这将极大地限制堆栈大小)。

我们添加了对 PATCH HTTP 动词的支持,您可能已经从新的 GitHub API 中了解到它

patch '/' do
  # ... modify a resource ...
end

现在可以使用 logger 帮助程序进行日志记录,并且它是否写入日志取决于您是否启用了日志记录

configure(:test) { disable :logging }

get '/' do
  logger.info "I just want to let you know: I'll take care of the request!"
  "Hello World!"
end

erubis 方法已弃用。如果可用,Sinatra 将自动使用 Erubis 渲染 ERB 模板。

此版本还有更多内容,但其余部分主要是错误修复和改进行为。例如,Sinatra 在将 ETags 和 Last-Modified 标头用作不安全 HTTP 动词的乐观锁定时,会正确处理它们。有关更多更改,请参阅 1.3.0 更改日志

特别感谢以下人员帮助发布 1.3.0 版本

Gabriel Andretta、michelc、burningTyger、Tim Felgentreff、Vasily Polovnyov、nashby、kenichi nakamura、Gaku Ueda、Gabriel Horner、Sylvain Desvé、Jacob Burkhart & Josh Lane、aibo (irc)、Selman ULUG、Aviv Ben-Yosef、Paolo “Nusco” Perrotta、Marcos Toledo、Matthew Schinckel、Tim Preston、Davide D’Agostino、Simone Carletti、Peter Suschlik、Postmodern、F. Zhang、Rémy Coutable 和 David Waite

Sinatra 1.2.7

从 Sinatra 1.3.0 版本开始,我们将不再支持 1.3 之前的 Rack 版本和 Ruby 1.8.6。但是,我们将继续为 Sinatra 1.2 提供错误修复,直到 Rack 1.2.x 结束生命周期,并且 Sinatra 1.2 将始终与最新发布的 1.8.6 版本保持兼容。

有关回溯补丁,请参阅 1.2.7 变更日志

感谢所有帮助发布 1.2.7 版本的人

Emanuele Vicentini、Takanori Ishikawa、David Kellum、Gaku Ueda、Lee Reilly、Iain Barnett、pete、Luke Jahnke、John Wolfe、Andrew Armenia、Tim Felgentreff 和 Alessandro Dal Grande

Sinatra-Contrib

市面上有很多 Sinatra 扩展,其中一些被大量应用程序使用,例如 sinatra-content-for 或 sinatra-reloader。这些扩展的维护者必须跟上新的 Sinatra 版本,以确保一切正常运行。这有时会造成问题,尤其是一些扩展依赖于 Sinatra 内部机制。为了解决这个问题,我们创建了 sinatra-contrib 项目(源代码位于 https://github.com/sinatra/sinatra-contrib)。该项目包含许多对大多数 Sinatra 应用程序可能很有用的扩展。有些是经过大量重写的旧扩展,以确保代码质量符合开发者对 Sinatra 本身的期望,并且不再依赖于内部机制,例如 sinatra-namespace;还有一些是新的通用扩展,例如 sinatra-respond-with。

承诺:从 1.3.0 版本开始,每个 Sinatra 版本都将始终有一个完全兼容的 sinatra-contrib 版本。所有与 sinatra-contrib 一起发布的扩展的文档都将在 Sinatra 网站上提供。我无法独自完成这一切,因此我非常感谢 Gabriel Andretta 加入并帮助完成了这个项目。

文档可在 sinatrarb.com/contrib 获取。

Sinatra 食谱

Zachary Scott 最近推出了 食谱 项目。它包含社区贡献的 Sinatra 食谱和技巧。