# 1.1 Ruby on Rails 開發環境介紹
## 概要:
本課時介紹了 Ruby 及 Rails 的開發環境,RVM 和 Ruby 的安裝,以及操作系統平臺的選擇。
## 知識點:
1. RVM 安裝
1. Ruby 安裝
1. Rails 安裝
1. 代碼管理
## 正文
### 1.1.1 Ruby 簡介
Ruby, 是由 [松本行弘](https://github.com/matz) 先生在1995年正式發布的一種“面向對象編程”的腳本語言。推薦兩本松本行弘的書籍。
| 封面 | 書評 |
|-----|-----|
|  | 《松本行弘的程序世界》是探索程序設計思想和方法的經典之作。作者從全局的角度,利用大量的程序示例及圖表,深刻闡述了Ruby編程語言的設計理念,并以獨特的視角考察了與編程相關的各種技術。 |
|  | 《代碼的未來》是Ruby之父松本行弘的又一力作。作者對云計算、大數據時代下的各種編程語言以及相關技術進行了剖析,并對編程語言的未來發展趨勢做出預測,內容涉及Go、VoltDB、node.js、CoffeeScript、Dart、MongoDB、摩爾定律、編程語言、多核、NoSQL等當今備受關注的話題。 |
再推薦大家幾本 Ruby 開發給書,方便大家在學習 Rails 之余,更多的了解 Ruby。
| 封面 | 書名 |
|-----|-----|
|  | Ruby 編程 |
|  | Ruby 元編程 |
|  | 七周七語言 |
更多 Ruby 的介紹,大家可以查看 [Ruby簡介](https://www.ruby-lang.org/zh_cn/about/) 和 [20分鐘體驗 Ruby](https://www.ruby-lang.org/zh_cn/documentation/quickstart/)。
### 1.1.2 Rails 簡介
我們使用的 Rails,就是基于 Ruby 開發的。Rails 的完整稱呼是 Ruby on Rails,簡稱 RoR,是由 丹麥人 [David Heinemeier Hansson](http://david.heinemeierhansson.com/)(DHH)在2003年發布的開源 Web 框架。

圖為穿著賽車服的 DHH,他和其他兩隊友獲得了2014年勒芒24小時耐力賽GTE-Am組的冠軍。
Rails 是一個基于 MVC 模式的高效的開發框架。在我剛剛接觸 Rails 的2007年,很多人說不需要了解 Ruby,就可以使用 Rails 開發網站了,足見 Rails 的方便和快捷。而快速開發,也成為了 Rails 迅速獲得眾多開發人員喜愛的原因,眾多大型網站,曾經或現在,正在使用著 Rails。Rails的受歡迎,也使得 Ruby 躋身最流行的開發語言排名前列。
注:勒芒大賽對車手是個極大的考驗,FISA規定勒芒每部賽車由3名賽手分別駕駛(1980年中期以前為2名賽手),即采用換人不換車的方法,所有的加油、換胎和維修時間都包括在24小時以內。最后,行駛里程最多的賽車獲勝,一般一晝夜下來,成績最好的賽車行駛的里程將近5000公里。每人連續駕駛時間不超過4小時,主車手總駕駛時間不超過14小時。勒芒環行跑道全長13公里,其中絕大部分是封閉式的公用高速公路,賽車在其2/3的路段上時速達370km/h左右,C組車一般只用3分鐘左右的時間就能跑完一圈的路程。在跑道上有一段約6km的直路,賽車在這段路上飛速駛過,速度達到390km/h。
### 1.1.3 Ruby 安裝
在安裝 Rails 前,我們先來安裝 Ruby 環境。這里,我們使用 rvm 這個工具。
注:以下安裝及后續開發是在 Mac 系統上進行的,Windows 系統可以選擇 [rubyinstaller](http://rubyinstaller.org/)。但是在 windows 開發 Rails 程序會遇到眾多問題,建議大家安裝虛擬機或者 Linux 雙系統進行開發。
RVM 是 Ruby 管理工具,可以方便的安裝、管理、切換多個 Ruby,管理 Gemset。
安裝 RVM 的命令是:
~~~
curl -sSL https://get.rvm.io | bash -s stable
~~~
如果你已經安裝了 RVM,可以用這個命令升級到最新的 stable 版本:
~~~
rvm get stable
~~~
在有的操作系統中,會給出這個提示:
~~~
* To start using RVM you need to run `source /home/webmaster/.rvm/scripts/rvm`
in all your open shell windows, in rare cases you need to reopen all shell windows.
~~~
這是你可以運行提示中的命令,`source /home/webmaster/.rvm/scripts/rvm`,或者退出當前登錄 shell,再次登入。
我們在當前開發用戶中安裝 RVM,不必切換到 root 用戶下。在生產服務器(Poduction)中,可以使用專門的項目管理用戶,并具備 sudo 權限。我們在后面部署章節里會詳細介紹。
安裝完 RVM 后,我們可以使用 `rvm -v` 查看版本。我們使用 `rvm list known` 這個命令,可以查看可安裝的 Ruby 版本:
~~~
% rvm list known
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p598]
[ruby-]2.1.4
[ruby-]2.1[.5]
[ruby-]2.2.0
[ruby-]2.2-head
ruby-head
~~~
我們的課程里,將使用2.2.0這個版本:
~~~
rvm install 2.2.0
~~~
我們可以查看當前安裝的 Ruby 版本:
~~~
% rvm list
=* ruby-2.2.0 [ x86_64 ]
~~~
如果你已經安裝了其他版本的 Ruby,可以通過 `--default` 參數,設置 RVM 默認使用的 Ruby 版本:
~~~
rvm use 2.2.0 --default
~~~
看一下我們的 Ruby 版本:
~~~
% ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin13]
~~~
### 1.1.4 Rails 安裝
安裝 Rails 前,我們先創建一個 Gemset。Gemset 是一個獨立的 Gem 集合,可以為每個項目設置自己的 Gemset,而不會相互干擾。:
~~~
rvm gemset create rails4.2
rvm use 2.2.0@rails4.2 --default
gem install rails -v 4.2.0 --no-ri --no-rdoc
~~~
注:`--no-ri --no-rdoc` 會跳過安裝 ri 和 rdoc 文檔,可以減少安裝時間。
注:在一些系統環境中,還需要先安裝 bundler,它的命令是 `gem install bundler`。Bundler 是Ruby 跟蹤和安裝 Gem 的工具,它的官網在這里 [http://bundler.io/](http://bundler.io/)。
在后面代碼開發中,我們將繼續使用 Ruby 2.2 和 Rails 4.2 版本。
這里有一份 [RVM實用指南](https://ruby-china.org/wiki/rvm-guide) 供大家參考。
### 1.1.5 操作系統
Ruby 和 Rails 的開發環境,可以在多個操作系統上安裝,你可以選擇 Mac 作為開發平臺,也可以使用 ubuntu 等 linux 系統,作為開發和生產環境部署平臺。windows 系統可以作為開發平臺使用。
### 1.1.5 代碼管理
在正式進入我們的教學前,請先熟悉一下 git 的[簡單操作](http://gitbookio.gitbooks.io/progit/content/en/index.html)([中文版](https://github.com/progit/progit/tree/master/zh)),Git是一個開源的分布式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。
我們的代碼是放到 github 上的,你可以 clone 下來我們的代碼,在本地調試。另外,你也需要準備好自己的編輯器。
github是一個打開托管平臺,也是一個開發者的互動社區,你可以在上面閱讀大量的開源代碼,比如 [Ruby](https://github.com/ruby/ruby),[Rails](https://github.com/rails/rails),還有我們每一個章節的 [代碼](https://github.com/liwei78/rails-practice-code)。
墻裂建議你注冊一個 github 的賬號,把你學習的代碼和經驗總結放到上面去。代碼可以創建代碼倉庫(repo),學習經驗可以創建 github 的 wiki 頁面,或者使用 [markdown](https://help.github.com/articles/markdown-basics/) 來編寫。對于一些實用的代碼片段,可以使用 [gist](https://gist.github.com/) 保存。
### 閱讀
我推薦大家閱讀 [Rails 入門](http://guides.rubyonrails.org/getting_started.html) 介紹,它的 [中文](http://guides.ruby-china.org/getting_started.html) 內容在這里。
- 寫在前面
- 第一章 Ruby on Rails 概述
- Ruby on Rails 開發環境介紹
- Rails 文件簡介
- 用戶界面(UI)設計
- 第二章 Rails 中的資源
- 應用 scaffold 命令創建資源
- REST 架構
- 深入路由(routes)
- 第三章 Rails 中的視圖
- 布局和輔助方法
- 表單
- 視圖中的 AJAX 交互
- 模板引擎的使用
- 第四章 Rails 中的模型
- 模型的基礎操作
- 深入模型查詢
- 模型中的關聯關系
- 模型中的校驗
- 模型中的回調
- 第五章 Rails 中的控制器
- 控制器中的方法
- 控制器中的邏輯
- 第六章 Rails 的配置及部署
- Assets 管理
- 緩存及緩存服務
- 異步任務及郵件發送
- I18n
- 生產環境部署
- 常用 Gem
- 寫在后面