第 1 章 从零到部署

欢迎学习《Ruby on Rails 教程》。本书的目标是成为对“如果想学习使用 Ruby on Rails 进行 Web 开发,我应该从哪儿开始?”这一问题的最好答案。学习完本书的内容之后,你将具备使用 Rails 进行开发和部署 Web 程序的技能。同时你还能够通过一些进阶的书籍、博客和视频教程等活跃的 Rails 教学体系继续深造。本书基于 Rails 4,这里的知识代表着 Web 开发的发展方向。(《Ruby on Rails 教程》的最新版本可以从本书的网站上获取。)

(你现在看到的是针对 Rails 4 的版本,所有内容都和 Rails 4 兼容,但这并不是一个新版本,因为 Rails 4 的变化还没大到新出一版。作为一本入门书,本书和之前针对 Rails 3.2 的版本差别很小。小变化虽多(详见 旁注 1.1),但主要的变化是一个称为“健壮参数”的新安全技术,会在 7.3.2 节中介绍。只要 Rails 的变化足大,我就会新出一版,介绍 Turbolinks 和俄罗斯套娃缓存等技术,还会介绍 RSpec 的新用法,例如“功能测试”。)

旁注 1.1:与第二版的差异

下面的列表列出了本书和第二版之间几乎所有的差异。(最重要的一个差异是,使用了“健壮参数”,其他都是小变动。)我列出这个列表是为了方便第二版的读者(或者熟悉 Rails 3.2 的读者)快速查看两版的不同之处。如果你没用过 Rails 3.2 请忽略这个列表。

列表的每一项后面都有一个链接,指向变动所在的章节或代码。

  • 从 Rails 3.2 升级到 Rails 4.0(1.2.2 节
  • 显式引入 Capybara DSL(代码 3.10)
  • 把 RSpec 的 .should 句法换成了 expect().to3.2.1 节
  • have_selector('title', ...) 换成了 have_title(...)3.3.1 节
  • 更新操作所用的 HTTP 请求从 PUT 换成了 PATCH旁注 3.3
  • 引入样式表和 JavaScript 脚本时指定了针对 Turbolinks 的参数(代码 3.26)
  • root to: 'path' 换成了 root 'path'(代码 5.24)
  • find_by_thing(...) 换成了 find_by(thing: ...)6.1.4 节
  • rake db:test:prepare 命令换成了 rake test:prepare6.2.1 节
  • 撤掉 attr_accessible,换用“健壮参数”(7.3.2 节
  • 换用加密的记忆权标(8.2.1 节
  • before_filter 换成了 before_action(代码 9.21)
  • 使用 Capybara 的 match: :first 参数点击第一个匹配的链接(代码 9.42)
  • default_scope 的参数从 Hash 换成了 lambda(代码 10.11)
  • dup 换成了 to_a 方法(代码 10.12)
  • 使用 XPath 测试按钮的状态变化(11.2.4 节

注意,本书的目标并不仅仅是教你 Rails,而是教你怎样使用 Rails 进行 Web 开发,教会你为因特网开发软件的技能。除了讲到 Ruby on Rails 之外,涉及到的技术还有 HTML、CSS、数据库、版本控制、测试和部署。为了达成学习目标,本书使用了一个完整的方案:通过实例学习使用 Rails 从零开始创建一个真正的程序。如 Derek Sivers 在前言中所说的,本书内容采用线性TDD结构,需要从头开始按顺序读到结尾。如果你经常跳着阅读技术类书籍,这种线性的组织方式需要你适应一下。你可以将本书设想为一个电子游戏,学习完每一章就会升一级。(而练习就是每一关的小怪兽。)

本章首先将介绍如何安装 Ruby on Rails 所需的软件,搭建开发所需的环境(1.2 节)。然后创建第一个 Rails 程序 first_app。本书会遵从一些优秀的软件开发习惯,所以在创建第一个程序后我们会立即将它放到版本控制系统 Git 中(1.3 节)。最后,我们还将把这个程序放到实际的生产环境中运行(1.4 节)。

第 2 章我们会创建第二个程序,演示一些 Rails 程序的基本操作。为了快速创建,我们会使用脚手架功能(旁注 1.1)来创建一个示例程序(名为 demo_app),因为生成的代码还很粗糙也很复杂,第 2 章将集中精力在通过浏览器的 URI (经常称为 URL)1来和程序交互这一点上。

1 URI 是统一资源标识符(Uniform Resources Identifier)的简称,较少使用的 URL 是统一资源定位符(Uniform Resource Locator)的简称。在实际使用中,URL 一般和浏览器地址栏中的内容一样。

本书剩下的章节将介绍从零开始开发一个大型示例程序(名为 sample_app)。在这个程序的开发过程中将使用“测试驱动开发”(Test-driven Development, TDD)理念,从第 3 章开始创建静态页面,然后增加一些动态的内容。第四章则会简要的介绍一下 Rails 背后的 Ruby 程序语言。第五章到第九章将逐步完善这个程序的基础框架:网站的布局,用户数据模型,完整的注册和验证系统。最后在第 10 章和第 11 章将添加微博和社交功能,最终开发出一个可以实际运行的示例网站。

最终的示例程序将在外表上和一个同样采用 Rails 开发的微博网站十分相似2。虽然我们将主要的精力集中在这个示例程序上了,但是本书的重点却在于提供一些通用的方法,这样你就会具有坚实的基本功,不论开发什么样的 Web 程序都能够派上用场。

2 译者注:指 Twiiter

目录