跑起來(lái)吧 Ruby on Rails開(kāi)發(fā)初體驗(yàn)
最初看到很多關(guān)于Ruby on Rails極富吸引人應(yīng)用, 我也和很多比較性急程序員一樣,了解了Ruby語(yǔ)法之后就一頭扎進(jìn)Rails的絢麗宮殿,體驗(yàn)快速開(kāi)發(fā)Web應(yīng)用的成就感,卻不得不時(shí)時(shí)因?yàn)槿狈?duì)Ruby語(yǔ)言的深入了解而感到迷惑:這個(gè)類(lèi)里什么都沒(méi)有,它為什么會(huì)工作?那個(gè)地方寫(xiě)的代碼是什么意思?這么多文件時(shí)怎樣一個(gè)層次?
51CTO相關(guān)文章推薦:Ruby on Rails的核心特性是什么?
在經(jīng)歷初期Ruby語(yǔ)言迷茫之后. 慢慢開(kāi)始運(yùn)用上手.發(fā)現(xiàn)只要放平心態(tài), 踏踏實(shí)實(shí)學(xué)習(xí)一樣?xùn)|西也并非難事. 會(huì)初步使用Ruby但這只是一門(mén)語(yǔ)言. 總不能天天抱著語(yǔ)言一個(gè)勁狂啃, 也應(yīng)該干干應(yīng)用層次上活. 看到Rails社區(qū)上每天提交大量案例 總是讓我按捺不住親身體驗(yàn)快感, 所以一直打算寫(xiě)Ruby on Rails 關(guān)于Web快速開(kāi)發(fā)運(yùn)用. 一直抽不出時(shí)間靜下心來(lái)體會(huì)著里面運(yùn)用.
當(dāng)然對(duì)于Ruby,以及Ruby on Rails應(yīng)用,我接觸時(shí)間不長(zhǎng)。只能本著一個(gè)初學(xué)者探索態(tài)度逐步摸索前行,這其中體會(huì)也只有自己心里知道. 所以難免會(huì)有不少理解上紕漏和偏差,還望各位拍磚能收下留情。說(shuō)了這么多關(guān)于Ruby體會(huì)轉(zhuǎn)入正題吧,應(yīng)用經(jīng)典實(shí)例Hello World!
準(zhǔn)備工作
<1>初步了解Ruby和Ruby on Rails.
如果你不知道Ruby為何物?請(qǐng)參考51CTO之前報(bào)道《Ruby on Rails入門(mén)之道》、《進(jìn)入Ruby on Rails世界》等相關(guān)文章。
<2>構(gòu)建Ruby on Rails開(kāi)發(fā)環(huán)境.
關(guān)于構(gòu)建Ruby on Rails開(kāi)發(fā)環(huán)境,以及安裝Ruby on Rails,請(qǐng)參考最詳細(xì)的Ruby on Rails安裝步驟。
進(jìn)入開(kāi)發(fā)
<1>確認(rèn)開(kāi)發(fā)環(huán)境版本
進(jìn)入這個(gè)階段前傾確認(rèn)你Ruby on Rails開(kāi)發(fā)環(huán)境已經(jīng)搭建. 確認(rèn)已經(jīng)安裝后 請(qǐng)確認(rèn)Ruby和Rails礦建各自版本. 本實(shí)例開(kāi)發(fā)環(huán)境版本如下:
◆Ruby Version: 1.8.6.
◆Rails Version: 2.3.5.
◆Operator System: Windows 7.
Rails仍在高速發(fā)展階段,雖然版本有些落后但并不妨礙我們?nèi)パ葸@個(gè)Rails框架應(yīng)用。
<2>創(chuàng)建***個(gè)應(yīng)用程序
安裝Rails框架后,在應(yīng)用中同時(shí)也得到一個(gè)新的命令行:Rails. 類(lèi)似Cmd中利用Rails -v就是查看當(dāng)前Rails版本,這個(gè)命令行工具有助你構(gòu)建一個(gè)新的Rails Application. 當(dāng)我們馬上要?jiǎng)?chuàng)建一個(gè)Rails Application.時(shí)你肯定會(huì)問(wèn)用什么編譯工具?這個(gè)問(wèn)題暫且放在這里.
安裝Rails框架后多了一個(gè)Rails命令行. Rails命令行可以后臺(tái)操作中幫助我們只需利用最少配置即可創(chuàng)建并運(yùn)行一個(gè)應(yīng)用程序. 為了使Rails后臺(tái)操作能夠發(fā)揮作用, Rails必須找到應(yīng)用程序各種組件.(也就是應(yīng)用程序的目錄結(jié)構(gòu)). 這就意味必須創(chuàng)建固定目錄結(jié)構(gòu),把我們代碼放在正確目錄下用來(lái)調(diào)用, 而這些目錄結(jié)構(gòu)創(chuàng)建就是Create new Rails Application中默認(rèn)執(zhí)行了. 那我們創(chuàng)建一個(gè)Rails Application.確定他有工作目錄:C:\User\Chenkai\WorkDemo 命名為myfirstdemo 打開(kāi)Cmd. 進(jìn)入工作目錄輸入:rails myfirstdemo。
自動(dòng)創(chuàng)建完成后, 注意我創(chuàng)建硬盤(pán)地址:C:\User\Chenkai\WorkDemo 目錄下, 創(chuàng)建請(qǐng)確認(rèn)是否存在myfirtdemo文件夾否則會(huì)覆蓋源文件. 來(lái)查看一下目錄結(jié)構(gòu):
創(chuàng)建目錄結(jié)構(gòu)一目了然. 關(guān)于這么多目錄暫且先不要管他. 目前我只需用到他們中一個(gè)也就是Public目錄. Public顧名思義這個(gè)目錄文件是最終暴露給用戶(hù)看到的.這里面有個(gè)幾個(gè)關(guān)鍵文件Dispatcher[分發(fā)器].dispatcher.cgi, dispatch.fcgi, 和dispatch.rb[ruby文件]. 分發(fā)器主要負(fù)責(zé)從用戶(hù)接受瀏覽器發(fā)送的請(qǐng)求并將這些請(qǐng)求引導(dǎo)至指定應(yīng)用程序代碼中. 有點(diǎn)類(lèi)似Control.
在硬盤(pán)創(chuàng)建MyfirstDemo我們能看見(jiàn)一個(gè)Script文件夾:
該目錄存放的是一些工具腳本, 開(kāi)發(fā)程序中我們會(huì)用到它,現(xiàn)在我們使用其中一個(gè)Server腳本. 它會(huì)啟動(dòng)一個(gè)獨(dú)立運(yùn)行的WebBrick服務(wù)器[一個(gè)純Ruby編寫(xiě)的Wbe服務(wù)器].我們新建的Rails Application就在其中運(yùn)行, 把WebBrick啟動(dòng):
從提示成功信息中能看出,在3000端口上創(chuàng)建一個(gè)WebBrick服務(wù)器, 我們打開(kāi)http://localhost:3000/訪(fǎng)問(wèn)看看效果:
目前我們這個(gè)rails Application就算是運(yùn)行起來(lái), 只不過(guò)沒(méi)有自己編碼內(nèi)容. 下一步添加一個(gè)Hello World!到程序中. 在添加之前我想說(shuō)一下整個(gè)Hello World輸出過(guò)程, 其實(shí)就是MVC框架走的流程:
#p#
流程分析
用戶(hù)發(fā)送一個(gè)請(qǐng)求Rails, Rails接受請(qǐng)求后進(jìn)行解析找到合適的Control, 再調(diào)用Control中合適方法進(jìn)行處理, 返回一個(gè)特定視圖View. 將結(jié)果顯示給最終用戶(hù).
Rails框架已經(jīng)幫我們把絕大部分的"通信管道代碼"寫(xiě)好了, 整個(gè)流程已經(jīng)在Rails內(nèi)部有機(jī)結(jié)合在一塊, 為了在頁(yè)面輸入一個(gè)"Hello World!" 我們還需要另外創(chuàng)建一個(gè)Control和一個(gè)View. 創(chuàng)建控制器: 同創(chuàng)建一個(gè)Rails Application一樣簡(jiǎn)單. 這次調(diào)用的Script目錄下的Generate. 在CMD調(diào)用:
Controller的命名為sayhi,創(chuàng)建完成后我們可以在C:\Users\chenkai\WorkDemo\myfirstdemo\app\controllers目錄下找到Controller:
打開(kāi)Controller文件看看:
簡(jiǎn)單不能再簡(jiǎn)單,SayhiController是一個(gè)空類(lèi), 繼承至ApplicationController因此當(dāng)前類(lèi)默認(rèn)具有所有控制器行為.
說(shuō)明: Ruby 符合<和C#繼承使用:符號(hào)功能等同意為繼承。有了Control類(lèi)剩下編碼就是我們的工作了. 增加一個(gè)Action方法處理用戶(hù)請(qǐng)求, 現(xiàn)在我們又碰到一個(gè)問(wèn)題就是關(guān)于這個(gè)Action方法的命名.
<3>Rails Reques URL命名
其實(shí)在Rails中控制器命名這個(gè)概念遠(yuǎn)比你想象要復(fù)雜一些,當(dāng)然這些為了演示目的暫且不提.對(duì)于 Request URL命名根據(jù)Rails內(nèi)部自身用途作調(diào)整。例如:當(dāng)請(qǐng)求一個(gè)路徑這個(gè)路徑請(qǐng)求就是我們當(dāng)前的MyFirstDemo這個(gè)Rails Application. 路徑為:http://www.chenkai.com/online/myfirstdemo/sayhi/hello.
解析一下這個(gè)路徑:
Rails會(huì)根據(jù)路徑來(lái)判斷控制器名稱(chēng), 以及控制器內(nèi)部即將被調(diào)用的Action的名稱(chēng),在如上路徑中Sayhi就是對(duì)應(yīng)調(diào)用控制名稱(chēng), 而hello就是對(duì)應(yīng)控制器下調(diào)用Action方法.
<4>創(chuàng)建Control中Action
在Request URL 命名中我們能夠看得出.我們只需在SayhiController中添加一個(gè)名稱(chēng)為hello 的Action方法. 但是這個(gè)Action方法該做什么呢?其實(shí)這時(shí)的Action方法什么都不需要做, Action方法的職責(zé)是對(duì)視圖View顯示提供充分信息即可, 在目前這個(gè)HelloWorld程序中, 沒(méi)有信息需要Action方法去控制, 所以只需要定義空的Action方法即可.
<5>開(kāi)始調(diào)用
定義好了Controller我們現(xiàn)在嘗試著直接調(diào)用,會(huì)出現(xiàn)一些路徑錯(cuò)誤或提示Template is Missing。
提示這樣的錯(cuò)誤主要原因: 我們定義好了Controller卻沒(méi)有明確配置好返回到用戶(hù)到底對(duì)應(yīng)是哪個(gè)View. 其實(shí)在RAils中這種對(duì)應(yīng)關(guān)系已經(jīng)通過(guò)目錄結(jié)構(gòu)制定好了, 我們創(chuàng)建一個(gè)Sayhi控制器那么View視圖應(yīng)該在app/Views/Sayhi目錄下.只是因?yàn)檫@個(gè)目錄下沒(méi)有視圖 才回提示Missing錯(cuò)誤. 所以我們需要在app/Views/Sayhi目錄下創(chuàng)建一個(gè)hello.rhtml文件:
- <html>
- <head>hello rails i'm coming!head>
- <body>
- <h2>hello Rails! chenkai!h2>
- body>
- html>
保存, 到目前為止我們一個(gè)Controller和View視圖文件都創(chuàng)建, 也放在Rails規(guī)定制定目錄下,直接調(diào)用頁(yè)面輸出: Hello Rails. chenkai!至此一個(gè)關(guān)于Ruby on Rails hello World簡(jiǎn)單示例算是告一段落了。
【編輯推薦】
- 安裝Ruby on Rails技巧講解
- Ruby on Rails入門(mén)之道
- RoR(Ruby on Rails)走入企業(yè)應(yīng)用?
- 搭建Ruby on Rails開(kāi)發(fā)環(huán)境
- Ruby on Rails性能優(yōu)化七劍