第 1 章 从零开始,完成一次部署
最后更新于:2022-04-01 22:27:36
# 第 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 应用。
';