about 8 years ago
一. 前言
- 什麼是 RoR?全名是 Ruby on Rails,也簡稱Rails,是一個使用Ruby語言寫的開源Web應用框架,它是嚴格按照MVC結構開發的。它努力使自身保持簡單,來使實際的應用開發時的代碼更少,使用最少的配置。Rails的設計原則包括「不做重複的事」(Don't Repeat Yourself)和「慣例優於設定」(Convention Over Configuration)。Rails框架是以固定的命名習慣來自動判斷整個架構,預設下會將網址分析成
http://網站名稱/ControllerName/ActionName/Attribute
然後執行目標Controller(控制器)中的Action(方法),並取出指定的View(視圖)回傳給瀏覽器顯示。面對資料庫則以Model(模組)的形式,藉由Active Record作為與資料庫之間的傳輸介面。本文介紹的版本是最新的 Ruby 2.2.0 和 Rails 4.2.0。WIKI介紹 - 為何使用 Ubuntu?因為它是免費的 Linux作業系統,提供了友善的視窗環境,還可以和 Windows 7共存,不過記得要先 切割硬碟,或是拿一台舊電腦來安裝,當然你也可以直接用 VirtualBox 跑虛擬機來玩玩,簡單說就是為了省錢 XD。為何不建議用Windows開發
- 如果你也住桃園,對 RoR 有興趣,歡迎加入我們的 臉書社團,我們每月一、三週六早上10~12點在中壢SOGO附近有辦讀書會 (免費),歡迎一起來參加 ^_^
二. 安裝Ubuntu
- 準備Ubuntu Desktop光碟,版本請用 14.04 LTS (多核心CPU可裝64bit),不建議用最新的15.x,因為很多第三方軟體會裝不起來,像是TeamViewer、VirtualBox、Docker。ISO檔下載,Ubuntu安裝參考:一般安裝、VirtualBox安裝
- BIOS設定從光碟開機 => 安裝,語系用『繁體中文』,鍵盤排列方式用『英語(美式)』。
- 安裝類型選『清除磁碟並安裝Ubuntu』或『將Ubuntu與Windows 7安裝在一起』。
- 新增一筆使用者全名、電腦名稱、帳號、密碼。
- 重開機後登入帳號密碼,先搜尋 terminal 並把它拖曳到左邊啟動欄,再點一下開啟它。
- 修改更新套件主機 => 輸入
sudo vi /etc/apt/sources.list
把所有的tw.archive.ubuntu.com
修改成free.nchc.org.tw
輸入命令 :%s/tw.archive.ubuntu.com/free.nchc.org.tw/g
- 更新套件
sudo apt-get update && sudo apt-get upgrade
- 安裝常用套件
sudo apt-get install curl git-core vim nodejs tasksel sqlite3 lynx htop bwm-ng build-essential rcconf
- 用套裝軟體安裝程式來安裝 => 執行
sudo tasksel
,勾選 OpenSSH server、LAMP server,後面會要你輸入MySQL管理者root的密碼兩次。 - 安裝MySQL開發工具 => 執行
sudo apt-get install libmysqlclient-dev
(沒裝這個的話後面 mysql GEM 會安裝失敗) - 安裝vim插件(NERDTree) => 下載並解壓縮到家目錄下
cd ; unzip eddie-vim.zip
(下載點),打 vi 再按 F2就可以跳出樹狀目錄。
三. 安裝 Ruby
- 安裝 RVM (Ruby Version Manager) =>
curl -sSL https://get.rvm.io | bash -s stable
- 第一次安裝會出現警告,請先依照畫面指示匯入 gpg金鑰 =>
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
後再執行一次。 - 執行
echo 'source /home/patrick/.rvm/scripts/rvm' >> ~/.bashrc
- 執行
exit
關閉shell,重新登入使用者帳號,系統會自動啟動 rvm - 執行
rvm requirements
,系統會自動安裝Ruby需要的套件,會要你輸入使用者的密碼。 - 檢查 RVM 版本 =>
rvm -v
#1.26.10 - 查詢 Ruby 安裝了哪些版本 =>
rvm list known
#重點是你可以安裝多個Ruby版本patrick@ror:~# rvm list known # MRI Rubies [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
- 安裝 Ruby =>
rvm install 2.2.0
#前面 ruby- 可不加 - 檢查 Ruby 版本 =>
ruby -v
#2.2.0 - 查看系統目前裝了幾套 Ruby =>
rvm list
patrick@ror:~# rvm list rvm rubies ruby-1.8.7-head [ i686 ] ruby-1.9.1-p431 [ i686 ] ruby-1.9.3-p551 [ i686 ] ruby-2.0.0-p598 [ i686 ] =* ruby-2.2.0 [ i686 ]
說明: => - current =* - current && default * - default - 切換 Ruby 運行版本 =>
rvm use 2.2.0
- 查看 Ruby 安裝路徑 =>
which ruby
#建議用一般使用者安裝,路徑會指到 /home/patrick/.rvm/rubies/ruby-2.2.0/bin/ruby - 查看 Ruby 詳細資訊 =>
rvm info
四. 安裝 Rails
- 建立一個新的 Gemset (Gem集合) =>
rvm gemset create rails420
#目的是讓不同的 Ruby 版本裡面裝的 Gem 套件不會互相干擾 - 使用此 Gemset =>
rvm use 2.2.0@rails420 --default
#加了 --default 每次開機都指定用這個 Ruby 版本 - 查看 Gem 詳細資訊 =>
gem environment
- 更新 Gem (Rails套件的管理程式) =>
gem update --system
- 查詢 Rails 最新的版本 =>
gem search ^rails$ -d
#查所有Rails版本 點此 - 節省時間不安裝 RDoc 文件 =>
echo 'gem: --no-rdoc --no-ri' > ~/.gemrc
- 安裝 Rails =>
gem install rails -v 4.2.0
#版本號 -v 4.2.0 可不加,會自動安裝最新版 - 檢查 Rails 版本 =>
rails -v
#4.2.0 - 檢查目前安裝了幾個 Rails 版本 =>
gem list | grep rails
rails (4.2.0)
- 建立目錄 =>
mkdir projects ; cd projects
- 建立新專案 =>
rails new blog
#在new前加 _4.2.0_ 可指定Rails版本 - 執行
cd blog
# 進入該專案目錄 - 更新 Gem 套件 =>
bundle install
#註:bundle 是 Ruby 追蹤和安裝 Gem 的工具程式,每次修改到 Gemfile 都要跑一次,也可以只輸入bundle
- 列出安裝了哪些Gem =>
gem list
#若要查詢有哪些 Gem 可安裝,可以到 https://www.ruby-toolbox.com 或 http://bestgems.org - 啟動WEBrick 網站 =>
rails server
#或縮寫 rails s - 測試 => 打開瀏覽器連到 http://localhost:3000
- 關閉 WEBrick 網頁伺服器 => Ctrl + C
- 如果要查詢已安裝 Gem 的相關文件,可以執行
gem server
,再打開瀏覽器連到 http://localhost:8808
五. 用 Scaffold (腳手架) 快速建立專案1(SQLite資料庫)
- cd ~/project
- 執行
rails new project1
#後面沒指定資料庫,就使用預設的SQLite3資料庫 - 切換到該專案目錄下
cd project1
- 執行
bundle
#更新Gem套件 -
執行
rails generate (或縮寫 rails g) scaffold Books name:string description:text
會自動建立
控制器 /app/controllers/books_controller.rb、
模型 /app/models/book.rb、
視圖 /app/views/books/index.html.erb、edit.html.erb、show.html.erb、new.html.erb
輔助方法 /app/helpers/books_helper.rb 和 _form.html.erb
資源 /app/assets/javascripts/books.coffee
資源 /app/assets/stylesheets/books.scss
路由 /config/routes.rb ← 加入 resources :books (包含7個方法) 新增資料庫
rake db:migrate
#註:Rake = Ruby Make,算是Ruby的工具程式,常用的是檢查路由和資料庫維護,另外使用Sqlite3 資料庫不須執行rake db:create
指令。測試 => 執行
rails s
,打開瀏覽器連到 http://localhost:3000/books ,可以試著輸入幾筆資料 (點『New Book』超連結)
-
執行
sqlite3 db/development.sqlite3
可以查看 SQLite3 資料庫結構。SQLite指令 .tables #列出所有資料表 .schema books #顯示 books 資料表的架構 select * from books; #列出所有 books 資料表的資料 (只有SQL語法後面要加分號 ";" ) .q #離開 SQLite (或 .exit)
六. 標準程序建立專案2(MySQL資料庫)
- cd ~/project
- 執行
rails new project2 -d mysql
#指定使用MySQL資料庫 - 切換到該專案目錄下
cd project2
- 執行
bundle
#更新Gem套件 - 執行
rails g controller Students index show new create edit update destroy
#建立學生控制器 (複數),後面可接多個方法 (也可空白,後面再手動新增方法vi app/controllers/students_controller.rb
) - 執行
rails g model Student name:string age:integer
#建立學生模型 (單數),後面接資料欄位和屬性 - 修改 config/database.yml 加入MySQL管理者(root) 的密碼123456 #註:vi 按 F2 鍵可以開啟/關閉目錄視窗
- 執行
rake db:create
#建立MySQL資料庫 (註:每個專案會有三個資料庫,分別給開發、測試和正式環境使用,開發環境只會建立 project2_development 和 project2_test,除非前面加上RAILS_ENV=production
才會建立 project2_production) - 執行
rake db:migrate
#建立MySQL資料表 (students) - 執行
mysql -u root -p123456
可以查看 MySQL 資料庫結構。MySQL指令 show databases; #列出所有資料庫 use project2_development; #使用 project2_development 資料庫 show tables; #列出 project2_development 資料庫裡面有哪些資料表 desc students; #顯示 students 資料表的架構 exit; #離開MySQL
- 修改視圖
vi app/views/students/index.html.erb
,最底下一行插入 『現在時間:<%= Time.now %> 』 - 新增預設路由
vi config/routes.rb get 'students/index' 加入 root 'students#index'
- 檢查路由
rake routes
- 測試 => 執行
rails s
,打開瀏覽器連到 http://localhost:3000
七. 用 Scaffold (腳手架) 快速建立專案3(PostgreSQL資料庫)
- 安裝 PostgreSQL
sudo apt-get install postgresql postgresql-contrib libpq-dev
- 新增使用者
sudo -u postgres createuser -s patrick
- 進入控制台
sudo -u postgres psql
- 設置密碼
\password patrick
- 離開控制台
\q
- cd ~/project
- 執行
rails new project3 -d postgresql
#指定使用PostgreSQL資料庫 - 切換到該專案目錄下
cd project3
- 執行
bundle
#更新Gem套件 - 執行
rails g scaffold Blog title:string description:text
#快速建立部落格,後面接資料欄位和屬性 - 修改 config/database.yml 加入 username、password、host
- 執行
rake db:create
#建立MySQL資料庫 (註:每個專案會有三個資料庫,分別給開發、測試和正式環境使用,開發環境只會建立 project3_development 和 project3_test,除非前面加上RAILS_ENV=production
才會建立 project3_production) - 執行
rake db:migrate
#建立PostgreSQL資料表 (blogs) - 執行
sudo -u postgres sql
進入 PostgreSQL 主控台。PostgreSQL指令 \list #列出所有資料庫 \c project3_development #使用 project3_development 資料庫 \dt #列出 project3_development 資料庫裡面有哪些資料表 \d+ blogs #列出 blogs 資料表的架構(schema) select * from blogs; #顯示 blogs 資料表的內容 \q #離開 PostgreSQL
八. MVC架構
九. RESTful介紹 (轉貼自 Rails 101S)
十. 備註
- 移除某個 Ruby 版本 => 執行
rvm remove 2.2.0
#查詢 Ruby 版本號可以輸入rvm list
- 移除 RVM (請小心使用,會把所有的 Ruby、Rails 全部移除) => 執行
rvm implode
再輸入yes
patrick@linux:/$ rvm implode Are you SURE you wish for rvm to implode? This will recursively remove /home/patrick/.rvm and other rvm traces? (anything other than 'yes' will cancel) > yes Removing rvm-shipped binaries (rvm-prompt, rvm, rvm-sudo rvm-shell and rvm-auto-ruby) Removing rvm wrappers in /home/patrick/.rvm/bin Hai! Removing /home/patrick/.rvm /home/patrick/.rvm has been removed. Note you may need to manually remove /etc/rvmrc and ~/.rvmrc if they exist still. Please check all .bashrc .bash_profile .profile and .zshrc for RVM source lines and delete or comment out if this was a Per-User installation. Also make sure to remove
</span>rvm<span class="sb">
group if this was a system installation. Finally it might help to relogin / restart if you want to have fresh environment (like for installing RVM again). - 清空 Gemset =>
rvm gemset empty 2.2.0@rails420
#查詢Gemset集合可以輸入rvm gemset list
- 移除 Gemset =>
rvm gemset delete 2.2.0@rails420
#清空可以重新安裝Gem,和移除不同 - 如果要固定使用某個版本,可以在該專案目錄下執行
echo 'rvm use 2.2.0@rails420' >> .rvmrc
- [網站] 改用 RBENV 安裝 RoR
十一. RoR入門建議參考資料
- [網站] 笨方法學 Ruby
- [簡體書] Ruby基礎教程第四版(http://www.books.com.tw/products/CN11156746)
- [網站] Ruby 中文官方網站
- [網站] Ruby on Rails聖經 - Mac/Windows 環境安裝
- [繁體書] Ruby on Rails自習手冊:邁向鐵道工人之路
- [視頻] 與MySQL的零距離接觸
- [電子書] Rails 101S
- [電子書] Rails 102
- [網站] RailsGirls
- [網站] Ruby on Rails 中文指南
- [網站] Vim教學
- [視頻] Rails 10日談
- [網站] 跟Eddie Kao學Vim
- [網站] RVM實用指南
- [電子書] Linux Guide for Beginner