第 1 章 从零开始,完成一次部署

欢迎阅读《Ruby on Rails 教程:通过 Rails 学习 Web 开发》。本书的目的是教你如何开发 Web 应用,而我们选择的工具是流行的 Ruby on Rails Web 框架。如果你刚接触这一领域,本书会向你详细介绍 Web 应用开发的方方面面,包括 Ruby、Rails、HTML 和 CSS、数据库、版本控制、测试,以及部署的基本知识。学会这些知识足够为你赢得一份 Web 开发者的工作,或者还可以让你成为一名技术创业者。如果你已经了解 Web 开发,阅读本书能快速学会 Rails 框架的基础,包括 MVC 和 REST、生成器、迁移、路由,以及嵌入式 Ruby。不管怎样,读完本书之后,以你所掌握的知识,已经能够阅读讨论更高级话题的图书和博客,或者观看视频。这些都是旺盛的编程教学生态圈的一部分。[1]

本书采用一种综合式方法讲授 Web 开发,在学习的过程中我们要开发三个演示应用:第一个最简单,叫 hello_app1.3 节);第二个功能多一些,叫 toy_app第 2 章),第三个是真正的演示程序,叫 sample_app第 3 章第 12 章)。从这三个应用的名字可以看出,书中开发的应用不限定于某种特定类型的网站。不过,最后一个演示应用有点儿类似某个流行的社会化微博网站(很巧,这个网站一开始也是使用 Rails 开发的)。本书的重点是介绍通用原则,所以不管你想开发什么样的 Web 应用,读完本书后,都能建立扎实的基础。

人们经常会问,我要具备多少背景知识才能阅读本书学习 Web 开发。1.1.1 节对此做了详细分析。Web 开发是个具有挑战性的学科,对没有任何背景知识的初学者来说挑战更大。我最初为本书设定的阅读对象是已经具有一定编程和 Web 开发经验的开发者,但后来发现读者中有很多都刚开始接触开发。所以,现在你看到的本书第三版做出了很多努力,尽量降低了入门 Rails 的门槛。

旁注 1.1:降低门槛

本书第三版采取了很多措施,降低入门 Rails 的门槛:

  • 使用云端标准的开发环境(1.2 节),规避了安装和配置新系统涉及到的很多问题;

  • 合理利用 Rails 默认提供的组件,例如原生的 MiniTest 测试框架;

  • 删掉了很多外部依赖件(RSpec,Cucumber,Capybara,Factory Girl);

  • 使用一种更轻量级、更灵活的测试方式;

  • 延后介绍,或者删除了较为复杂的配置选项(Guard,Spork,RubyTest);

  • 弱化某个 Rails 版本特有的功能,更加强调 Web 开发的通用原则。

我希望这些变化能让本书第三版获得比前一版更多的读者。

这第一章,我们要安装 Ruby on Rails 以及需要的所有软件,而且还要架设开发环境(1.2 节)。然后创建第一个 Rails 应用,hello_app。本书旨在介绍优秀的软件开发习惯,所以在创建第一个应用之后,我们会立即将它纳入版本控制系统 Git 中(1.4 节)。你可能不相信,在这一章,我们还要部署这个应用(1.5 节),把它放到外网上。

第 2 章会创建第二个项目,演示 Rails 应用的一些基本操作。为了速度,我们会使用脚手架(旁注 1.2)创建这个应用(名为 toy_app)。因为生成的代码很丑也很复杂,所以第 2 章将集中精力在浏览器中,使用 URI(经常称为 URL)[2]和这个应用交互。

本书剩下的章节将集中精力开发一个真实的大型演示应用(名为 sample_app),所有代码都从零开始编写。在开发这个应用的过程中,我们会用到模拟技术,“测试驱动开发”(Test-driven Development,简称 TDD)理念,以及“集成测试”(integration test)。第 3 章创建静态页面,然后增加一些动态内容。第 4 章会简要介绍一下 Rails 使用的 Ruby 程序语言。第 5 章第 10 章将逐步完善这个应用的低层结构,包括网站的布局,用户数据模型,完整的注册和认证系统(含有账户激活和密码重设功能)。最后,第 11 章第 12 章将添加微博和社交功能,最终开发出一个可以正常运行的演示网站。

旁注 1.2:脚手架——更快,更简单,更诱人

Rails 出现伊始就吸引了众多目光,特别是 Rails 创始人 David Heinemeier Hansson 录制的著名的“15分钟开发一个博客程序”视频。这个视频及其衍生版本是窥探 Rails 强大功能一种很好的方式,我推荐你看一下这些视频。不过事先提醒一下,这些视频中的演示能控制在 15 分钟以内,得益于一种叫做“脚手架”(scaffold)的功能,通过 Rails 命令 generate scaffold 生成大量的代码。

写作本书时,我也想过使用脚手架,因为它更快、更简单、更诱人)。不过脚手架生成的大量且复杂的代码会让初学者困惑。虽然能学会脚手架的用法,但并不明白到底发生了什么事。使用脚手架,你只是一个脚本生成器的使用者,无法提升你对 Rails 的认识。

本书将采用一种不同的方式,虽然第 2 章会用脚手架开发一个小型的玩具应用,但本书的核心是从第 3 章起开发的演示应用。在开发这个演示应用的每个阶段,我们只会编写少量的代码,易于理解但又具有一定的挑战性。通过这一过程,最终你会对 Rails 有较为深刻的理解,而且能灵活运用,开发几乎任何类型的 Web 应用。