前言
Ruby On Rails可說是目前最火紅的Web技術,藉由其快速開發方式,席捲了全球的程式開發社群,ComputerWorld將Ruby On Rails列為2007年最熱門的資訊技術第一名。
在本文中與讀者分享如何快速的導入Ruby On
Rails,特別針對平日有案子在身,無法撥出空來研究新技術的程式開發人員,藉由本文重要觀念以及操作性步驟的引導下,能夠快速進入Ruby On
Rails的世界,以慎重考慮在目前或未來的專案是否改用Ruby On Rails。
筆者的經驗是Ruby On Rails很簡單,但是不容易,這是什麼意思呢?意思是Ruby On
Rails將許多Web開發繁瑣的細節簡化了,然而在開發時仍需要對於Ruby On
Rails的設計概念有清楚的認識,例如Model/View/Controller,才能順利上手。
本文在操作性的部份首先分享如何快速安裝Ruby On Rails,並藉由一個小例子來體會Ruby On
Rails,接下來針對Ruby On Rails的重要觀念進行解說,最後分享如何將Ruby On
Rails發佈到Linux平台,以供在實際的環境中使用。
安裝Instant Rails
本文假設讀者一般的開發環境在Windows平台,而發佈環境則在Linux平台;開始要體驗Ruby On Rails,最快的方式則是安裝InstantRails套件(http://instantrails.rubyforge.org/wiki/wiki.pl),在InstantRails包含了所有體驗Rails的套件,而不必額外安裝;主要包含了Apache、PHP、MySQL、Ruby、Ruby On Rails,更詳細的列表可以參考http://instantrails.rubyforge.org/wiki/wiki.pl?Release_Notes_For_Instant_Rails_1.7。
在撰寫本文時最新版的Instant Rails為1.7版,在下載完後直接解壓縮並執行InstantRails.exe檔案即完成安裝;啟動後會看到InstantRails的工具列,工具列共有四種按鈕,其中較為重要的是最左方的選單(I),針對選單下重要的項目說明如下:
- Configure針對各項InstantRails的模組進行設定,例如MySQL及PHP的設定檔都可在此找到。
- Rails Application下的Management Rails Application...可以用來管理Rails應用程式,而InstantRails已附了幾個現成的專案。
- Rails Application下的Open Ruby Console Window可以執行Ruby的Script,而不能直接開啟Windows的命令列來執行;此點甚為重要,在開發時會常用到。
讀者可以先進入Management Rails Application畫面,點選一個專案,然後按下Start with Mongrel,即能執行此Rails專案,在網址http://localhost:3000看到執行畫面,若要關閉應用程式則找到開啟的Console Window按下Ctrl+C即可。
第一個Ruby on Rails專案
在上節中介紹了如何安裝及使用InstantRails,建議讀者可以再多花5-10分鐘熟悉InstantRails的操作;接下來討論如何建立Rails專案,以一個簡單的使用者管理功能當做我們進入Rails的起點。
建立專案
要產生Ruby On Rails的專案相當地簡單,只需用rails加上專案名稱即可產生;底下為詳細的操作步驟:
- 開啟InstantRails工具列,若已執行則會出現在Windows右下方。
- 點選最左邊的選單,選Rails Applications->Open Ruby Console Window;當開啟後會出現Ruby on Rails的根目錄,例如筆者的為E:\InstantRails\rails_apps。
- 鍵入以下的指令來產生專案,假設專案名稱為goldenhouse。
rails goldenhouse
如此即可產生Rails專案,亦可以用完整路徑來產生專案,例如rails
E:\InstantRails\rails_apps\goldenhouse;進入goldenhouse的目錄,可以發現rails幫我們產生了許
多目錄,以下為這些目錄的說明,這些目錄使得專案相當獨立,很容易打包後再移植到別的平台。
目錄
| 說明
|
app
| Rails主要的程式碼放置處;以MVC架構來規劃,controllers用來回覆瀏覽器的請求,models用來代表資料庫資料,而views則依controllers需求將結果傳回給瀏覽器。
|
components
| 用來放置重複使用的元件。
|
config
| 存放資料庫連線設定。
|
db
| 用來存放資料庫綱要。
|
doc
| 自動產生的rails文件。
|
lib
| 共用的函式庫。
|
log
| 當執行程式時的Log檔案。
|
public
| 用來存HTML相關文件,能在網路上存取到。
|
Rakefile
| 用來產生測試程式碼及文件的Script。
|
script
| 其中包含了常用的Script,例如啟動內建的Server、產生框架程式。
|
test
| 測試程式碼。
|
vendor
| 第三方程式碼。
|
上述目錄當中最常使用到的是app目錄,其中包含了主要的Rails程式碼及介面,若是開發Database應用程式,則開始時一定會設定config下的database.yml檔案;script目錄下的程式也會常用來產生程式碼框架以及執行測試伺服器。
更新資料庫設定
在建立資料庫前,我們先到config目錄下的database.yml,裡面可以設定資料庫連線,database.yml是簡化的XML語
法,Rails將資料庫分為開發、測試中及產品的資料庫,可以設定不同的資料庫。當產生Rails專案時會自動取與專案名稱相同的資料庫,並加上開發階段
後置詞(goldenhouse_development、goldenhouse_test、goldenhouse_production),亦可自
行取代資料庫名稱,並更改連線名稱及密碼:
development: adapter: mysql database: goldenhouse_development username: root password: host: localhost |
建立資料庫及綱要
在Rails中建立資料庫可用phpMyAdmin介面建立或是直接下指令的方式,此部份提供SQL指令給讀者參考。
CREATE DATABASE `goldenhouse_development` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
在Rails中可以用Migration方法建立資料表,由Rails來幫助維護資料表,或是直接建立資料表;其步驟如下。
- 建立Migration目錄及檔案,本例為E:\InstantRails\rails_apps\goldenhouse\db\migrate\001_create_users.rb。
- 將001_create_users.rb加入下列的程式碼;加入後在Console Window下的goldenhouse的根目錄鍵入rake migrate即可產生對應的資料表。
class CreateUsers<ActiveRecord::Migration def self.up create_table:users do |t| t.column "name":string t.column "realname":string t.column "password":string end end def self.down drop_table "users" end end |
對應的SQL語法如下,亦可用phpMyAdmin來建立資料表。
CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) collate utf8_unicode_ci default NULL, `realname` varchar(255) collate utf8_unicode_ci default NULL, `password` varchar(255) collate utf8_unicode_ci default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ; |
[編輯] 產生頁面
Rails運用Scaffold方法可以幫助我們產生程式的框架,其指令如下。
ruby script\generate scaffold User Signup |
其中User對應到資料表名稱(users),而Signup則是要產生的Controller名稱,所產生的檔案如下:
- models\user.rb:user model檔案,繼承至Active Record;用來代表資料庫綱要的物件模型。
- controllers\signup_controller.rb:signup controller檔案,用來回應瀏覽請求,程式碼包含了新建、更新、刪除及瀏覽資料的程式碼。
- views\signup\*:當執行signup controller中的某個後,會選擇將某個頁面(View)傳回給使用者,其檔案格式為RHTML會先經過Rails的解析再傳回HTML給使用者。
藉由Rails的Scaffld方法可以在資料庫綱要設計好後,快速的產生雛型程式,方便與使用者溝通需求,並易於修改。
執行應用程式
在產生了雛型程式後即可於瀏覽器上測試,要啟用內建伺服器的指令為:
此指令會啟動內建伺服器WebBrick;接下來打開瀏覽器,輸入http://localhost:3000/singup,即可看Scaffold為我們產生的頁面。
正確支援Unicode
這個小節應該是在進階的文章中提及,然而看到MySQL中的資料內容顯示亂碼就會令人很難過,底下為讓Rails與MySQL支援Unicode的方法:
- 在建立資料庫時選擇utf8_unicode_ci編碼。
- 將所有的Ruby檔案(*.rb)及RHTML皆另存成UTF-8檔案格式,在Windows平台建議用EmEditor來儲存。
- 在database.yml檔案中增加一行如下。
development: adapter: mysql database: goldenhouse_development username: root password: host: localhost encoding: utf8 |
- 找到application.rb檔案新增以下的方法:
class ApplicationController < ActionController::Base def configure_charsets @response.headers["Content-Type"] = "text/html; charset=utf-8" # Set connection charset. MySQL 4.0 doesn’t support this so it # will throw an error, MySQL 4.1 needs this suppress(ActiveRecord::StatementInvalid) do ActiveRecord::Base.connection.execute 'SET NAMES UTF8' end end end |
在Linux安裝
安裝Ruby
Ruby及Ruby On Rails的下載可以至官方網站;在Linux的操作步驟如下。
- cd /opt/lampp/htdocs/downloads/ruby/;切換Ruby原始碼下載目錄,可依需求調整。
- wget http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.5-p2.tar.gz,下載Ruby原始碼。
- tar -zxf ruby-1.8.5-p2.tar.gz解壓縮。
- cd ruby-1.8.5
- ./configure產生make檔案。
- make編輯Ruby。
- make install安裝Ruby。
- 安裝完後的執行檔在/usr/local/bin,可在任意目錄打ruby確認是否安裝完成。
安裝Gem
Gem為Ruby本身的套件管理程式,如同Linux的Yum及Apt;強列建議一定要安裝,藉由Gem可直接至Ruby網站下載安裝、升級及移除套件,相當方便。
- wget http://files.ruby.inoack.com/rubygems/rubygems-0.9.2.tgz
- tar -zxf rubygems-0.9.2.tgz
- cd rubygems-0.9.2
- ruby setup.rb
安裝Ruby on Rails
- gem install rails --include-dependencies即可安裝Rails;或是可用gem install rails做自訂安裝。
- cd /opt/rubyonrails,切換要建立Ruby On Rails的目錄。
- rails firstapp,用來建立RoR應用程式的指令;會建立在/opt/rubyonrails/firstapp/之下。
- cd firstapp,切換到RoR應用程式目錄。
- ruby script/server啟動內建的Web Server進行測試。
- ruby script/server -d 在背景執行
- ruby script/server -p=portnumber,指定port。
- ruby script/server -e=development,指定要執行的環境,分為development、test、production。
- http://ipaddress:3000若看到Ruby的歡迎畫面(Welcome aboard)即成功建立RoR應用程式。
注意若無法連接資料庫,需將database.yml下的host要設為127.0.0.1,名稱為localhost會產生連線錯誤;並且需用gem install mysql來安裝MySQL驅動程式。
安裝Mongrel
Mongrel是個比rails內建的Webricks還好的Rails Web Server,強烈建議安裝,而不要用內建的Webricks;安裝指令如下。
使用方式為:
- mongrel_rails start:切換到Rails 的應用程式根目錄打入即可使用。
- mongrel_rails start -d:deamon模式,在背景執行。
- mongrel_rails start -p 1234:使用特定port。
- mongrel_rails start -e production/development/test:使用不同開發階段的資料庫。
- mongrel_rails start -l log/mongrel_log:指定log file。
- mongrel_rails restart:重新起動Mongrel。
- mongrel_rails stop:停止Mongrel。
結語
在本文中介紹了Ruby On Rails的安裝方式,並用一個簡單的範例來說明其快速的開發速度,並在最後分享如何在Linux上安裝;希望對於讀者進入Ruby On Rails領域有所幫助。