# 第 1 章 从零开始,完成一次部署
欢迎阅读《Ruby on Rails 教程:通过 Rails 学习 Web 开发》。本书的目的是教你如何开发 Web 应用,而我们选择的工具是流行的 [Ruby on Rails](http://rubyonrails.org) Web 框架。如果你刚接触这一领域,本书会向你详细介绍 Web 应用开发的方方面面,包括 Ruby、Rails、HTML 和 CSS、数据库、版本控制、测试,以及部署的基本知识。学会这些知识足够为你赢得一份 Web 开发者的工作,或者还可以让你成为一名技术创业者。如果你已经了解 Web 开发,阅读本书能快速学会 Rails 框架的基础,包括 MVC 和 REST、生成器、迁移、路由,以及嵌入式 Ruby。不管怎样,读完本书之后,以你所掌握的知识,已经能够阅读讨论更高级话题的图书和博客,或者观看视频。这些都是旺盛的编程教学生态圈的一部分。[[1](#fn-1)]
本书采用一种综合式方法讲授 Web 开发,在学习的过程中我们要开发三个演示应用:第一个最简单,叫 `hello_app`([1.3 节](#the-first-application));第二个功能多一些,叫 `toy_app`([第 2 章](chapter2.html#a-toy-app)),第三个是真正的演示程序,叫 `sample_app`([第 3 章](chapter3.html#mostly-static-pages)到[第 12 章](chapter12.html#following-users))。从这三个应用的名字可以看出,书中开发的应用不限定于某种特定类型的网站。不过,最后一个演示应用有点儿类似某个流行的[社会化微博网站](https://twitter.com)(很巧,这个网站一开始也是使用 Rails 开发的)。本书的重点是介绍通用原则,所以不管你想开发什么样的 Web 应用,读完本书后,都能建立扎实的基础。
人们经常会问,我要具备多少背景知识才能阅读本书学习 Web 开发。[1.1.1 节](#prerequisites)对此做了详细分析。Web 开发是个具有挑战性的学科,对没有任何背景知识的初学者来说挑战更大。我最初为本书设定的阅读对象是已经具有一定编程和 Web 开发经验的开发者,但后来发现读者中有很多都刚开始接触开发。所以,现在你看到的本书第三版做出了很多努力,尽量降低了入门 Rails 的门槛。
##### 旁注 1.1:降低门槛
本书第三版采取了很多措施,降低入门 Rails 的门槛:
* 使用云端标准的开发环境([1.2 节](#up-and-running)),规避了安装和配置新系统涉及到的很多问题;
* 合理利用 Rails 默认提供的组件,例如原生的 MiniTest 测试框架;
* 删掉了很多外部依赖件(RSpec,Cucumber,Capybara,Factory Girl);
* 使用一种更轻量级、更灵活的测试方式;
* 延后介绍,或者删除了较为复杂的配置选项(Guard,Spork,RubyTest);
* 弱化某个 Rails 版本特有的功能,更加强调 Web 开发的通用原则。
我希望这些变化能让本书第三版获得比前一版更多的读者。
这第一章,我们要安装 Ruby on Rails 以及需要的所有软件,而且还要架设开发环境([1.2 节](#up-and-running))。然后创建第一个 Rails 应用,`hello_app`。本书旨在介绍优秀的软件开发习惯,所以在创建第一个应用之后,我们会立即将它纳入版本控制系统 Git 中([1.4 节](#version-control-with-git))。你可能不相信,在这一章,我们还要部署这个应用([1.5 节](#deploying)),把它放到外网上。
[第 2 章](chapter2.html#a-toy-app)会创建第二个项目,演示 Rails 应用的一些基本操作。为了速度,我们会使用脚手架([旁注 1.2](#aside-scaffolding))创建这个应用(名为 `toy_app`)。因为生成的代码很丑也很复杂,所以[第 2 章](chapter2.html#a-toy-app)将集中精力在浏览器中,使用 URI(经常称为 URL)[[2](#fn-2)]和这个应用交互。
本书剩下的章节将集中精力开发一个真实的大型演示应用(名为 `sample_app`),所有代码都从零开始编写。在开发这个应用的过程中,我们会用到模拟技术,“测试驱动开发”(Test-driven Development,简称 TDD)理念,以及“集成测试”(integration test)。[第 3 章](chapter3.html#mostly-static-pages)创建静态页面,然后增加一些动态内容。[第 4 章](chapter4.html#rails-flavored-ruby)会简要介绍一下 Rails 使用的 Ruby 程序语言。[第 5 章](chapter5.html#filling-in-the-layout)到[第 10 章](chapter10.html#account-activation-and-password-reset)将逐步完善这个应用的低层结构,包括网站的布局,用户数据模型,完整的注册和认证系统(含有账户激活和密码重设功能)。最后,[第 11 章](chapter11.html#user-microposts)和[第 12 章](chapter12.html#following-users)将添加微博和社交功能,最终开发出一个可以正常运行的演示网站。
##### 旁注 1.2:脚手架——更快,更简单,更诱人
Rails 出现伊始就吸引了众多目光,特别是 Rails 创始人 David Heinemeier Hansson 录制的著名的“[15分钟开发一个博客程序](http://v.youku.com/v_show/id_XNzg5MjUwOTU2.html)”视频。这个视频及其衍生版本是窥探 Rails 强大功能一种很好的方式,我推荐你看一下这些视频。不过事先提醒一下,这些视频中的演示能控制在 15 分钟以内,得益于一种叫做“脚手架”(scaffold)的功能,通过 Rails 命令 `generate scaffold` 生成大量的代码。
写作本书时,我也想过使用脚手架,因为它[更快、更简单、更诱人](http://en.wikipedia.org/wiki/Dark_side_(Star_Wars))。不过脚手架生成的大量且复杂的代码会让初学者困惑。虽然能学会脚手架的用法,但并不明白到底发生了什么事。使用脚手架,你只是一个脚本生成器的使用者,无法提升你对 Rails 的认识。
本书将采用一种不同的方式,虽然[第 2 章](chapter2.html#a-toy-app)会用脚手架开发一个小型的玩具应用,但本书的核心是从[第 3 章](chapter3.html#mostly-static-pages)起开发的演示应用。在开发这个演示应用的每个阶段,我们只会编写少量的代码,易于理解但又具有一定的挑战性。通过这一过程,最终你会对 Rails 有较为深刻的理解,而且能灵活运用,开发几乎任何类型的 Web 应用。
- Ruby on Rails 教程
- 致中国读者
- 序
- 致谢
- 作者译者简介
- 版权和代码授权协议
- 第 1 章 从零开始,完成一次部署
- 1.1 简介
- 1.2 搭建环境
- 1.3 第一个应用
- 1.4 使用 Git 做版本控制
- 1.5 部署
- 1.6 小结
- 1.7 练习
- 第 2 章 玩具应用
- 2.1 规划应用
- 2.2 用户资源
- 2.3 微博资源
- 2.4 小结
- 2.5 练习
- 第 3 章 基本静态的页面
- 3.1 创建演示应用
- 3.2 静态页面
- 3.3 开始测试
- 3.4 有点动态内容的页面
- 3.5 小结
- 3.6 练习
- 3.7 高级测试技术
- 第 4 章 Rails 背后的 Ruby
- 4.1 导言
- 4.2 字符串和方法
- 4.3 其他数据类型
- 4.4 Ruby 类
- 4.5 小结
- 4.6 练习
- 第 5 章 完善布局
- 5.1 添加一些结构
- 5.2 Sass 和 Asset Pipeline
- 5.3 布局中的链接
- 5.4 用户注册:第一步
- 5.5 小结
- 5.6 练习
- 第 6 章 用户模型
- 6.1 用户模型
- 6.2 用户数据验证
- 6.3 添加安全密码
- 6.4 小结
- 6.5 练习
- 第 7 章 注册
- 7.1 显示用户的信息
- 7.2 注册表单
- 7.3 注册失败
- 7.4 注册成功
- 7.5 专业部署方案
- 7.6 小结
- 7.7 练习
- 第 8 章 登录和退出
- 8.1 会话
- 8.2 登录
- 8.3 退出
- 8.4 记住我
- 8.5 小结
- 8.6 练习
- 第 9 章 更新,显示和删除用户
- 9.1 更新用户
- 9.2 权限系统
- 9.3 列出所有用户
- 9.4 删除用户
- 9.5 小结
- 9.6 练习
- 第 10 章 账户激活和密码重设
- 10.1 账户激活
- 10.2 密码重设
- 10.3 在生产环境中发送邮件
- 10.4 小结
- 10.5 练习
- 10.6 证明超时失效的比较算式
- 第 11 章 用户的微博
- 11.1 微博模型
- 11.2 显示微博
- 11.3 微博相关的操作
- 11.4 微博中的图片
- 11.5 小结
- 11.6 练习
- 第 12 章 关注用户
- 12.1 “关系”模型
- 12.2 关注用户的网页界面
- 12.3 动态流
- 12.4 小结
- 12.5 练习