└── 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 | --------------------------------------------------------------------------------