首頁‎ > ‎電子期刊‎ > ‎2007 年 4 月號‎ > ‎

快速導入Ruby on Rails


前言

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),針對選單下重要的項目說明如下:

  1. Configure針對各項InstantRails的模組進行設定,例如MySQL及PHP的設定檔都可在此找到。
  2. Rails Application下的Management Rails Application...可以用來管理Rails應用程式,而InstantRails已附了幾個現成的專案。
  3. 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加上專案名稱即可產生;底下為詳細的操作步驟:

  1. 開啟InstantRails工具列,若已執行則會出現在Windows右下方。
  2. 點選最左邊的選單,選Rails Applications->Open Ruby Console Window;當開啟後會出現Ruby on Rails的根目錄,例如筆者的為E:\InstantRails\rails_apps。
  3. 鍵入以下的指令來產生專案,假設專案名稱為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來幫助維護資料表,或是直接建立資料表;其步驟如下。

  1. 建立Migration目錄及檔案,本例為E:\InstantRails\rails_apps\goldenhouse\db\migrate\001_create_users.rb。
  2. 將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方法可以在資料庫綱要設計好後,快速的產生雛型程式,方便與使用者溝通需求,並易於修改。

執行應用程式

在產生了雛型程式後即可於瀏覽器上測試,要啟用內建伺服器的指令為:

 
ruby script\server

此指令會啟動內建伺服器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的操作步驟如下。

  1. cd /opt/lampp/htdocs/downloads/ruby/;切換Ruby原始碼下載目錄,可依需求調整。
  2. wget http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.5-p2.tar.gz,下載Ruby原始碼。
  3. tar -zxf ruby-1.8.5-p2.tar.gz解壓縮。
  4. cd ruby-1.8.5
  5. ./configure產生make檔案。
  6. make編輯Ruby。
  7. make install安裝Ruby。
  8. 安裝完後的執行檔在/usr/local/bin,可在任意目錄打ruby確認是否安裝完成。

安裝Gem

Gem為Ruby本身的套件管理程式,如同Linux的Yum及Apt;強列建議一定要安裝,藉由Gem可直接至Ruby網站下載安裝、升級及移除套件,相當方便。

  1. wget http://files.ruby.inoack.com/rubygems/rubygems-0.9.2.tgz
  2. tar -zxf rubygems-0.9.2.tgz
  3. cd rubygems-0.9.2
  4. ruby setup.rb

安裝Ruby on Rails

  1. gem install rails --include-dependencies即可安裝Rails;或是可用gem install rails做自訂安裝。
  2. cd /opt/rubyonrails,切換要建立Ruby On Rails的目錄。
  3. rails firstapp,用來建立RoR應用程式的指令;會建立在/opt/rubyonrails/firstapp/之下。
  4. cd firstapp,切換到RoR應用程式目錄。
  5. ruby script/server啟動內建的Web Server進行測試。
    1. ruby script/server -d 在背景執行
    2. ruby script/server -p=portnumber,指定port。
    3. ruby script/server -e=development,指定要執行的環境,分為development、test、production。
  6. 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;安裝指令如下。

 
gem i mongrel。

使用方式為:

  • 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領域有所幫助。

Comments