Electronic Joint Business

Solution for E-Business

rails

用 PostgreSQL Schemas 创建多租户 Rails 应用

许多 Rails 应用有多租户的需求。为此可以采取多种不同的策略,而每种策略都各有利弊。Guy Naor 曾对每一策略的利弊都进行了详细论述,具体可以参考他的 2009 Acts As Conference talk(必看)。1

这些多租户策略之一运用了 Postgresql 特有的称为 “Schemas” 的特性。不过 Guy 只是在技术层面泛泛带过,并未深入到实现细节。要如何运用这一策略来实际完成多租户应用,你可以从网上搜到几篇博客、StackOverflow 的讨论以及一些半成品,但诸多细节还要自己推敲,这里我将之记录下来,以飨读者。

为什么使用 PostgreSQL Schemas
Guy 列举了多租户 Rails 应用的三种基本策略:2

  • 每个租户使用独立数据库
  • 单一数据库,用记录维护着租户关系的范围
  • 单一数据库,每个租户使用不同的 Schemas (只适用 PostgreSQL)

选择哪一种策略需要诸多考量,这里不一一列举,我想说的是,对于第 3 种策略,应用应有以下特征:

  • 租户的数据是私有的,不能泄露给其他租户
  • 几乎不进行跨租户数据聚合的查询
  • 租户数量很多,无法承担过高管理开销

由于应用间存在千差万别,所以个人建议你最好认真看完该演讲,然后自己阿里做决定。如果你最终还是选择了 PostgreSQL Schema ,你再回来继续读完这篇文章。

>>> 阅读全文

 

, , ,

Rails3 技术手册 (一) 概述

英文原文
Ruby on Rails 是用于快速简洁地开发 Web 应用框架。它被 37signal 公司的项目管理工具 Basecamp 中剥离出来,其作者 David Heinemeier Hansson 率先用 Rails 着手解决手边的现实问题。 我们会发现用 Rails 进行开发时充满乐趣, Rails 负担起了开发中那些无聊的琐事,因此开发者能专注于所要解决的问题本身。

你如果不理解这些开发中的琐事,可以看一下下面的例子:编写过 Web 应用的开发者都不可避免地会用到字典结构、缓存、数据持久化、模板系统、测试框架、路由等等组件。Rails 自身就带了这堆让应用上线运行所必需的组件,而且作者在编写它们时充分考虑了彼此的适配问题。以往希望模板语言能和复杂的 ORM 层能在一起工作的麻烦现在再也没有了。一切将是如此简单。

现在开发者无需再为数据库等的组件编写大量繁琐的 XML 配置。Rails 基于约定而非配置,配置因而精简到最少。假如 Animal 类就是关联到数据库的 animals 数据表,为什么还要让开发者花时间写配置文件来链接它们? 这一切就让 Rails 来帮你吧。

简而言之,Rails 让 Web 开发充满乐趣。

架构
Rails 应用开发是基于模型-视图-控制器模式的 (MVC) 的。想了解 Rails 是如何使用 MVC 的, 最简单的办法是透过了解 Rails 请求的生命周期。如图1-1所示:

>>> 阅读全文

 

, , , , , , ,

Ruby Slim 模板语言

Slim 是一个快速的轻量级的模板引擎,其设计目的是通过精简视图端语法,让开发者更专注于内容的本质。Slim 支持 Rails3,在 Ruby 1.9.2和 Ruby/REE 1.8.7 上都能正常工作。

Slim 的语法的设计思想是,“够用即可- What’s the minimum required to make this work” 。 在后面的例子中,我们将会看到 Slim 的语法是多么简洁。随着越来越多的人参与到 Slim 项目里,现在 Slim 也可以支持 Haml 和 Jade 的语法附加。 Slim 团队很欢迎这些扩展,因为对编程语言的审美观是因人而异的。

Slim 使用 Temple 来进行解析/编译,它也被集成到 Tilt,因此 Slim 可以很好地和 Sinatra 或者单纯的 Rack 一起工作。

为什么需要 Slim?
在 Rails 社区,Erb 和 Haml 无疑是两大最流行的模板引擎,但是 Erb 的语法相当累赘而 Haml 的语法则含糊不清难以接受。 Slim 采用的是非常简化且高效的语法,就执行效率而言,用户是无需顾虑的。

没错,Slim 非常之快。在本文的最后你可以找到基准测试的结果,如果你对测试结果持保留意见,那我们也提供了进行基准测试的 rake 任务,你可以自己动手测试来查看结果。

>>> 阅读全文

 

, , ,