└── README.md
/README.md:
--------------------------------------------------------------------------------
1 | # 前言
2 |
3 | 學習曲線過高往往是有志於學習 Ruby on Rails 的開發者心中的一抹遺憾。市面上的中文書不知過期了幾年,網路上找到的 Hello World 跑不起來。最誇張的是,光是想裝一套穩當的開發環境在電腦上,卻發現自己完全不得其門而入,做不到!
4 |
5 | 我是 xdite,台灣知名的資深 Ruby on Rails 程式設計師。07年 自學 Rails 至今。曾經訓練、帶領多支技術團隊開發過各式各樣的 Rails 專案。
6 |
7 | 在過去的自學過程當中,我意識到 Ruby on Rails 的版本變革過速,是造成開發者培育不易的主要原因。培育一個合格的初級 Rails Developer,企業可能往往要投上數月甚至一年才有所得。
8 |
9 | 如果能幫新手**弭平各式各樣的超級門檻**,是不是能把長達一年的摸索期,砍到只剩短短的幾個禮拜?最後,我設計了一份超級新手作業(最後變成了本書)。這份作業成功的讓我將新人培育的時間從**數月降至兩週以下**。這些開發者,有的甚至**之前從未有過任何網頁開發背景**。
10 |
11 | 你也想學 Rails 嗎?他們可以,我相信你也辦得到!
12 |
13 | # 說明
14 |
15 | 這份文件 是 [Rails 101](http://rails-101.logdown.com) 的部分公開資料。若您喜歡本書,請付費 [購買支持](http://rails-101.logdown.com)。(註:因為 Rails 版本更新速度過快,如有安裝環境問題,請參考本指南。)
16 |
17 |
18 | 另外要再提醒的是,Rails 用「看的」並不會「達成任何效果」。而這本書裡面的每一個章節,都是身為 Rails Developer 中基本再基本的功夫,跳過任何一章只會讓你屆時在實戰中踢到更大的鐵板。建議讀者反覆練習寫到倒背如流。
19 |
20 | 筆者建議的練習標準是:能夠在五分鐘之內用手寫出 RESTful 七個 action,讀者不妨可以試看看。
21 |
22 | # 目錄
23 |
24 | * [購買一台 Mac](#buy-a-mac)
25 | * [Learn : Git, Command Line, Ruby](#learn-git-command-line-ruby)
26 | * [建置 Bug Free Rails 開發環境 (Mac/Ubuntu)](#%E5%BB%BA%E7%BD%AE-bug-free-rails-%E9%96%8B%E7%99%BC%E7%92%B0%E5%A2%83)
27 | * [Rails : RESTful](#rails--restful--%E9%9B%99%E5%B1%A4-resource)
28 | * [實作使用者認證系統](#%E5%AF%A6%E4%BD%9C%E4%BD%BF%E7%94%A8%E8%80%85%E8%AA%8D%E8%AD%89%E7%B3%BB%E7%B5%B1)
29 | * [為論壇加入管理者機制以及管理者後台](#%E7%82%BA%E8%AB%96%E5%A3%87%E5%8A%A0%E5%85%A5%E7%AE%A1%E7%90%86%E8%80%85%E6%A9%9F%E5%88%B6%E4%BB%A5%E5%8F%8A%E7%AE%A1%E7%90%86%E8%80%85%E5%BE%8C%E5%8F%B0)
30 | * [為論壇加上分頁機制](%E7%82%BA%E8%AB%96%E5%A3%87%E5%8A%A0%E4%B8%8A%E5%88%86%E9%A0%81%E6%A9%9F%E5%88%B6)
31 | * [實作圖片上傳系統](#%E5%AF%A6%E4%BD%9C%E5%9C%96%E7%89%87%E4%B8%8A%E5%82%B3%E7%B3%BB%E7%B5%B1)
32 | * [利用 Rake 撰寫自動執行的 tasks](#%E5%88%A9%E7%94%A8-rake-%E6%92%B0%E5%AF%AB%E8%87%AA%E5%8B%95%E5%9F%B7%E8%A1%8C%E7%9A%84-tasks)
33 | * [將論壇 deploy 到租來的 VPS](#%E5%B0%87%E8%AB%96%E5%A3%87-deploy-%E5%88%B0%E7%A7%9F%E4%BE%86%E7%9A%84-vps)
34 | * [Rails 最新線上學習資源](#rails-%E6%9C%80%E6%96%B0%E7%B7%9A%E4%B8%8A%E5%AD%B8%E7%BF%92%E8%B3%87%E6%BA%90)
35 |
36 | ## Buy a Mac
37 |
38 | 開發 Ruby on Rails 基本上強烈建議使用 OS X 10.6 + 以後作為開發平台。因為不少的 Rails ecosystem 都圍繞著 OSX。不用 Mac 開發基本上非常容易碰壁。
39 |
40 | ### 硬體需求
41 |
42 | * 一台 2009 後出款的 Mac Mini / Macbook Pro / Macbook Air 。
43 | * 4 - 8GB 以上的記憶體。(開發網站的時候,有實際開 VM 測 IE 的需求。)
44 |
45 | ## Learn Git, Command Line, Ruby
46 |
47 | Rails 的生態圈與 Git 和 Unix Command Line 綁的非常深。不熟悉的入門者,建議購買以下教材實作練習:
48 |
49 | * Peepcode 的 [Git](https://peepcode.com/products/git) $12 ,練習以下七個指令
50 | - git commit
51 | - git push
52 | - git pull
53 | - git branch
54 | - git checkout
55 | - git merge
56 |
57 | * Peepcode 的 [Meet the Command Line](https://peepcode.com/products/meet-the-command-line) $12 與 [Advanced Commandline](https://peepcode.com/products/advanced-command-line) $12。跟著練習裡面所有的指令
58 |
59 | * Zed Shaw 曾出了一本小書「[Learn Ruby The Hard Way](http://lrthw.github.com/)」,有 52 個習題。歡迎做完它。
60 |
61 | ## 建置 Bug Free Rails 開發環境
62 |
63 | * Mac 版本:
64 | * Ubuntu 版本:[Rails 101](http://rails-101.logdown.com) 內有。
65 |
66 | 延伸閱讀:[十個 Ruby Web Developer 應該熟悉的工具](http://blog.xdite.net/posts/2011/10/09/10-ruby-developer-must-have-tools/)
67 |
68 | ### 開發工具
69 |
70 | 建議使用 [Sublime Text 2](http://www.sublimetext.com/2) 支援跨平台:Win / Linux / Mac。
71 |
72 | ## Rails : RESTful , 雙層 Resource
73 |
74 | ### 作業目標
75 |
76 | 開發一個簡易論壇系統。系統要有 Board 與 Post 兩個 model,寫出 CRUD 介面,並且文章網址是使用 這種表示。
77 |
78 | ### 吸收觀念
79 |
80 | * CRUD & migration
81 | * has_many 與 belongs_to
82 | * resources 與雙層 resources
83 | * before_filter :find_board
84 |
85 |
86 | ## 實作使用者認證系統
87 |
88 | ### 作業目標
89 |
90 | 為論壇加入使用者機制,使用者必須能夠 註冊 / 登入,登入後才可以發表 Post,不然只能瀏覽。只有自己的 Post 才能進行修改與刪除。
91 |
92 | ### 吸收觀念
93 |
94 | * plugin 安裝與使用 : [devise](https://github.com/plataformatec/devise/)
95 | * routes 優先權與 route alias
96 | * before_filter: login_required
97 | * session : current_user
98 | * [before_filter](http://apidock.com/rails/ActionController/Filters/ClassMethods/before_filter)
99 |
100 | ## 為論壇加入管理者機制以及管理者後台
101 |
102 | ### 作業目標
103 |
104 | 實作簡單的 admin 機制, admin 擁有一個後台,可以刪改所有文章。admin 可以開板 / 刪板。網址是 。
105 |
106 | 只有身分是 admin 的人可以進後台。admin 的判別方是 column 裡加一個 boolean,判斷是否 admin。
107 |
108 | 這個 attribute 必須用 attr_accessible / attr_protected 保護。
109 |
110 | ### 吸收觀念
111 |
112 | * [attr_accessible](http://apidock.com/rails/v3.0.7/ActiveModel/MassAssignmentSecurity/ClassMethods/attr_accessible) / [attr_protected](http://apidock.com/rails/v3.0.7/ActiveModel/MassAssignmentSecurity/ClassMethods/attr_protected)
113 | * route : namespace
114 | * before_filter : require_is_admin
115 |
116 | ## 為論壇加上分頁機制
117 |
118 | ### 作業目標
119 |
120 | 看板的文章要能夠分頁,每一頁 5 筆,每一個看板要秀出現在看板裡有多少 post 數量。可用 params 配合 scope 在文章列表排序。
121 |
122 | ### 吸收觀念
123 |
124 | * [counter_cache](http://railscasts.com/episodes/23-counter-cache-column)
125 | * pagination : [will_paginate](https://github.com/mislav/will_paginate/wiki/)
126 | * [scope](http://railscasts.com/episodes/108-named-scope) :recent
127 |
128 | ## 實作圖片上傳系統
129 |
130 | ### 作業目標
131 |
132 | 發表文章時可以順便夾帶一張附件。
133 |
134 | ### 吸收觀念
135 |
136 | [form_for](http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for) multipart # 內含多媒體要指定
137 |
138 | ### 上傳檔案套件
139 |
140 | [carrierwave](https://github.com/jnicklas/carrierwave)
141 |
142 | ## 利用 Rake 撰寫自動執行的 tasks
143 |
144 | ### 作業目標
145 |
146 | 用 Rake 撰寫自動化步驟,生假資料。
147 |
148 | 寫一個 rake 可以達成以下步驟:「砍 db => 建 db => 跑 migration => 生種子資料」,另一個 rake 是生假文章與假論壇。
149 |
150 |
151 | ### 吸收觀念
152 |
153 | * rake -T
154 | * rake db:drop ; rake db:create ; rake db:migrate ; rake db:seed
155 | * rake dev:fake ( 自己寫 namespace : dev, 裡面放一個 task 叫做 fake,fake 資料用 Populator 生) # 請自行練習
156 |
157 | ### 參考資料
158 |
159 | * [Ruby on Rails Rake Tutorial (aka. How rake turned me into an alcoholic)](http://jasonseifer.com/2010/04/06/rake-tutorial)
160 | * [What’s New in Edge Rails: Database Seeding](http://ryandaigle.com/articles/2009/5/13/what-s-new-in-edge-rails-database-seeding)
161 |
162 | ## 將論壇 deploy 到租來的 VPS
163 |
164 | ### 作業目標
165 |
166 | 在租來的 VPS 上面建置 Ruby on Rails production 環境,使用 Ruby 1.9 與 mod_rails。使用 [Capistrano](https://github.com/capistrano/capistrano/wiki) 佈署 application。
167 |
168 | ### 吸收觀念
169 |
170 | * cap deploy:setup
171 | * cap deploy
172 | * cap deploy:rollback
173 | * cap deploy:restart
174 |
175 | ### 參考資料
176 |
177 | * [rails-nginx-passenger-ubuntu](https://github.com/jnstq/rails-nginx-passenger-ubuntu)
178 | * [AWDR4](http://pragprog.com/titles/rails4/agile-web-development-with-rails) 的 deploy 章節 , Rails Pocket Reference 的 Capistrano 章節
179 |
180 |
181 | ## Rails 最新線上學習資源
182 |
183 | ### Podcast
184 |
185 | * [Ruby5](http://ruby5.envylabs.com/)
186 | * [Ruby Rogues](http://rubyrogues.com/)
187 | * [Thoughtbot Podcast](http://robots.thoughtbot.com/tagged/podcast)
188 | * [The Ruby Show](http://rubyshow.com/)
189 |
190 | ### 商業教材
191 |
192 | * [Codeschool](http://codeschool.com)
193 | * [Railscast](http://railscast.com)
194 | * [DestroyAllSoftware](https://www.destroyallsoftware.com/)
195 | * [Peepcode](https://peepcode.com/)
196 |
197 | ### Websites
198 |
199 | * [Ruby Inside](http://www.rubyinside.com/)
200 | * [RubyFlow](http://www.rubyflow.com/)
201 | * [Ruby Weekly](http://rubyweekly.com/)
202 | * [Ruby Tips](http://rubyquicktips.com/)
203 | * [Rails Tips](http://railstips.org)
204 | * [Ruby Toolbox](http://ruby-toolbox.com/)
205 |
--------------------------------------------------------------------------------