文章詳情頁
Ruby on Rails之Oracle應用
瀏覽:106日期:2023-11-21 18:15:52
Rails 是一個易用的框架,但像任何技術一樣,要精通它還需一定的時間。2006 年 4 月發(fā)表 您可能對 Ruby on Rails 已有所耳聞,這一新應用框架正以狂風暴雨之勢席卷 Web 開發(fā)社區(qū),尤其是 J2EE 和 PHP 編程界。 Rails 是一個功能強大的 Web 應用平臺,在不到兩年的時間內(nèi)便贏得了眾多 J2EE 和 PHP 編程人員的廣泛青睞。它為什么會得到 J2EE 和 PHP 編程人員的垂青?了解 Rails 的優(yōu)勢后您的疑問將一掃而空。其一是它使用了嚴格的 model-view-controller (模式—視圖—控制器)體系結構,贏得了自尊且醉心于設計模式的“妄客”(自我的技術迷)的尊敬 — 這是 J2EE 開發(fā)人員對其情有獨鐘的原因。其二是使用 Rails 可以非常方便地構建基礎系統(tǒng) — 這是它吸引 PHP 開發(fā)人員的原因。 但是,從數(shù)據(jù)庫角度來看,Rails 有一些非常明顯的缺陷。Rails 對數(shù)據(jù)庫布局和應用程序需求作了許多假定。比如,Rails 假定所有表都使用一個非復合的主鍵。它不支持復合主鍵!另外,Rails 不支持雙步提交;它只能用于單個數(shù)據(jù)庫后端的情況。 本文不是 Rails 的吹捧文章或是批判文章,僅是對這一技術的一個介紹。其中既有褒獎也有批評。可能有時批判顯得有點嚴厲(在 Rails 狂熱愛好者眼中尤其如此),但是不要為表象所迷惑。使用任何 Web 應用框架都要講究技巧,不管它是 J2EE、Asp.Net、或 PHP。從長遠來看,使用 Rails 比使用其它 Web 應用開發(fā)平臺的效率更高,但是需要一定的時間來熟悉和把握該技術。 什么是 Ruby?什么是 Rails? Ruby 是一種動態(tài)編程語言,它在許多方面類似于 Perl、Python 和 Smalltalk,但是它是自成體系的。Java 和 PHP 編程人員似乎可以很輕松的把握這一語言,他們是 Ruby 的最大擁護者。這一語言還吸引著其他人的加入,包括 Don Box 這位 Microsoft 界的超級“妄客”。 Ruby 的歷史不短,它問世于 1993 年,先于在 1995 年便為公眾知曉的 Java 和 PHP。所以盡管 Ruby 是一個成熟的語言,卻不如其它語言普及。這造成了 Ruby 編程語言陣營并不如 Java、PHP 和 Perl 陣營強大。因此,您會發(fā)現(xiàn)專門針對這一語言的框架、庫、書籍、網(wǎng)站、博客和其它資源都比較少。 在 David Heinemeier Hanson 于近期推出了 Rails 框架后,Ruby 社區(qū)推廣能力不濟的頹勢得到了扭轉(zhuǎn),有證據(jù)表明該框架是 Ruby 誕生以來最受歡迎的應用程序。Rails 將 Ruby 編程語言擴展為極其適用于 Web 開發(fā)的領域特定語言(Domain Specific Language)。它還借用了 ActiveRecord 擴展,將對象關系持久性引入了 Ruby 語言。Rails 讓人敬而遠之的原因除了它不支持復合主鍵和兩步提交外,其最大的障礙在于要使用它您需要重新學習一門編程語言。這不是大部分人可以不求甚解一略而過的階段,學習一門新語言雖然可以為您帶來歡樂,但同時卻是一條令人生畏的坎坷之途。但是,假如您想在自己的履歷中添上濃墨重彩的一筆,Ruby 語言便是不二之選。梅花香自苦寒來,Ruby 是一個完全不受商業(yè)利益左右,歷經(jīng) 10 年錘煉而成的語言。所以,使用 Ruby 能給您帶來愉悅的享受,在很多情況下,其生產(chǎn)率比 Java、C 和 Microsoft .NET 語言高出一個數(shù)量級。(IronPython 可能是個例外,它是 Python 語言與 Microsoft .NET 環(huán)境的接口。Python 類似于 Ruby,也是一個生產(chǎn)率很高的動態(tài)編程語言。) Rails 的用途是什么? Rails 是一個從零開始設計而成的框架,用于構建使用關系數(shù)據(jù)庫后端的動態(tài)網(wǎng)站。它將要害詞引入了 Ruby 編程語言,簡化了 Web 應用程序的配置。此外,它還可以基于現(xiàn)有的數(shù)據(jù)庫模式自動生產(chǎn)完整的 Web 應用程序,盡管有點粗糙。這一能力既是 Ruby 的突出優(yōu)點,卻同時也是它的致命弱點。Rails 假定了數(shù)據(jù)庫模式命名規(guī)范,假如遵循這一規(guī)范,只需執(zhí)行一個命令即可生成一個基本 Web 站點。但要完成這一工作需要進行一些額外配置,有時這些配置可能根本無法實現(xiàn)。您還會發(fā)現(xiàn) Rail 假定的數(shù)據(jù)庫規(guī)范幾乎都是可更改的,但是更改得越多,該平臺的生產(chǎn)率就越低。這就是 Rails 在開發(fā)新數(shù)據(jù)庫的新應用程序時能大顯神通的原因。但它卻不是處理原有系統(tǒng)的一個上佳方案。 示例是了解使用 Rails 開發(fā)新應用程序的最好方式。假如您安裝有 Oracle 數(shù)據(jù)庫,且能夠基于這一數(shù)據(jù)庫創(chuàng)建新數(shù)據(jù)庫和新表,那么創(chuàng)建一個完整的 Web 應用程序的用時將不超過 15 分鐘。在本示例中,我們將使用 Ruby on Rails 來構建一個產(chǎn)品目錄。 示例:簡單的產(chǎn)品目錄 我從去年開始投資高檔漫畫書,非凡是 1946 年以來的舊版漫畫書。我創(chuàng)建了一個簡單的 Ruby on Rails 數(shù)據(jù)庫應用程序,利用它我在買賣活動中就可來方便地插入、移除、更改和刪除書籍。因為是供我個人使用,所以程序自然是能減則減。本文中要構建的應用程序是我所使用的 Ruby on Rails 應用程序的“廋身”版。 盡管 Rails 和 Oracle 數(shù)據(jù)庫可用于很多平臺上,但本文采用了 Windows XP,有證據(jù)表明它是 Oracle 應用程序開發(fā)人員最常用的平臺之一。本示例非常簡單,其實就是 “Hello World” 編程語言示例的數(shù)據(jù)庫版,目的是讓您初嘗 Ruby,但它并沒有展示 Rails 的所有能力,就像任何編程語言的“Hello World”示例都沒有淋漓盡致地展示該語言的所有能力一樣。 假如您在運行這一示例的過程中出現(xiàn)了問題,原因可能有以下三種:下載的代碼不對;數(shù)據(jù)庫設置不當,不能連到該示例應用程序;或者是您的 Windows XP 操作系統(tǒng)出現(xiàn)了問題。在開發(fā)本示例的過程中,我碰到了一些涉及版本和數(shù)據(jù)庫配置的問題 — 所有這些都是由缺乏知識而造成的。我從我的朋友 Michael Carland 那里學到了許多知識,這樣才得以順利完成這一示例,并使之盡量簡單。 實際情況是,實現(xiàn) Ruby on Rails 和 Oracle 的協(xié)同工作并不是一件簡單的事情。有時會讓人倍感灰心。如完全按本文中的說明,您應該不會碰到問題。但是一旦超出本示例的范圍,就會出問題。Rails 可以達到很高的生產(chǎn)率,但它是一個命令行開發(fā)環(huán)境,并不提供高級集成開發(fā)環(huán)境通常所具有的“自動化”功能。假如您不是“自力更生”型的技術人員,那目前最好不要使用 Rails。第 1 步:設置 Oracle 數(shù)據(jù)庫 假如您對結合使用 Rails 和 Oracle 不感愛好的話,您也不會來看這篇文章,所以您需要安裝一個 Oracle 數(shù)據(jù)庫實例并向該數(shù)據(jù)庫添加一個表。嚴格遵循本文中的命名規(guī)范非常重要,否則由 Rails 自動生成的代碼將無法正常運行(假如不進行調(diào)整)。您要創(chuàng)建的表如下所述: CREATE TABLE comics (id,;;NUMBER(10) NOT NULL,title;;VARCHAR2(60), ;;NUMBER(4),publisher;VARCHAR2(60),PRIMARY KEY (id));CREATE SEQUENCE comics_seq;這里提供了一個 SQL 腳本文件,您可以用它來創(chuàng)建表并添加一些產(chǎn)品數(shù)據(jù)。我建議您使用它,以便您的應用程序便與這里開發(fā)的保持一致。完成這一工作最簡單的方法是按照以下步驟使用 SQL*Plus。(假定您已經(jīng)安裝有 Oracle 數(shù)據(jù)庫并知道如何使用它。) 使用 SQL*Plus,創(chuàng)建一個擁有 DBA 權限的用戶,用于在這一應用程序中進行操作。 SQL> GRANT dba TO ruby IDENTIFIED BY ruby;SQL> ALTER USER ruby DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;SQL> EXIT使用 SQL 文件,創(chuàng)建應用程序表 COMICS,然后插入一些示例數(shù)據(jù)。 C:> sqlplus ruby/ruby@rails @comics.sql可能您已經(jīng)發(fā)現(xiàn)本例中創(chuàng)建的 COMICS 是復數(shù)形式,這似乎不太正常,因為通常我們都將表命名為單數(shù)形式(例如 COMIC)。但是,Rails 采用了復數(shù)形式來命名表。通過 Rails 配置可以更改這一默認規(guī)范,但使用復數(shù)名稱更為簡便。 第 2 步:安裝 Ruby、RubyGems、Rails 和 Rails Oracle 庫 要在 Windows XP 上使用 Rails,需要兩個軟件:帶 RubyGems 的 Ruby 編程語言安裝包,Rails 1.0 (1.1 版已于不久前推出,但本文只討論 1.0),和 Rails Oracle 數(shù)據(jù)庫庫。要下載和安裝帶 Gems 的 Ruby 安裝程序,請按以下步驟進行。 訪問 http://rubyinstaller.rubyforge.org/。 下載“One-Click Ruby Installer”。 按照說明完成安裝。安裝完 Ruby 編程平臺后,您就可以使用 RubyGems 這一 Ruby 應用工具很方便地安裝 Ruby 框架了。要安裝 Rails 應用程序開發(fā)框架,您只需打開命令行提示符,鍵入一個命令: C:> gems install rails -v 1.0.0 --remote現(xiàn)在您已經(jīng)成功安裝了 Ruby、RubyGems 和 Rails,接下來可以安裝一些專用代碼庫,以實現(xiàn) Rails 應用程序和 Oracle 數(shù)據(jù)庫服務器的通信。要下載和安裝 Oracle Rails 庫,請訪問 http://rubyforge.org/projects/ruby-oci8,下載 ruby-oci8-0.1.13-mswin.r 到 C 盤中,然后在命令窗口中執(zhí)行以下命令: C:> ruby ruby-oci8-0.1.13-mswin.rb假如一切順利,到目前為此,您就完成了 Ruby、Rails 和 Rails-Oracle 連接庫的安裝。下一步就是創(chuàng)建您的第一個 Ruby on Rails Web 應用程序了。 第 3 步:創(chuàng)建 Web 應用程序 要創(chuàng)建一個新的 Rails 應用程序,先要按照以下步驟創(chuàng)建一個新的 Rails 項目: 使用 rails 命令行應用程序創(chuàng)建一個新項目(將自動創(chuàng)建新目錄)。 C:> rails comics_catalog更改目錄,進入前一步創(chuàng)建的新項目目錄。 C:> cd comics_catalogC:comics_catalog>現(xiàn)在您已經(jīng)創(chuàng)建了一個新的 Rails 項目目錄,下面您需要配置項目以讓 Rails 應用程序使用 Rails-Oracle 連接庫。 在您的項目目錄中,有一個 config 目錄,其中有一個 database.yml 文件。您需要使用文本編輯器來對 database.yml 文件進行編輯。該文件的原始內(nèi)容如下: development:adapter:mysqldatabase:rails_developmenthost:localhostusernamerootpassWord: # Warning:The database defined as 'test' will be erased and# re-generated from your development database when you run 'rake'.# Do not set this db to the same as development or prodUCtion.test:adapter:mysqldatabase:rails_testhost:localhostusernamerootpassword:production:adapter:mysqldatabase:rails_productionhost:localhostusernamerootpassword:不同的數(shù)據(jù)庫需要使用不同的連接屬性。Rails 的默認設置適用于 MySQL,但您要重新配置該項目以使用 Oracle。按照下列步驟更改 development 屬性。(您也可以更改 test 和 production 屬性,但本文不討論這些內(nèi)容) development:adapter:ociusernameruby口令):rubyhost:RAILS 使用 Rails 創(chuàng)建 Web 應用程序的方法有多種,但到目前為止最為簡單的方法是使用 Rails 1.0.0 中新增的一個命令行功能,使用它可以一次構建整個應用程序。 C:comics_catalog> ruby script/generate scaffold Comic 除了在命令行窗口中連續(xù)出現(xiàn)的輸出外,還發(fā)生了什么呢?Rails 代碼生成器創(chuàng)建了模型、視圖和控制器 Ruby 代碼來訪問 COMICS 表。在本例中您使用 Rails 的 scaffold 來創(chuàng)建應用程序,它將為您完成所有的工作。假如更改了數(shù)據(jù)庫表,您需要重新運行 scaffold 命令。否則您的應用程序?qū)o法工作。 現(xiàn)在您已經(jīng)生成了 web 應用程序,接下來就是啟動 Ruby Web 服務器 — WEBRick。 C:comics_catalog> ruby script/server您可以在任何時候更改您應用程序的 Ruby 代碼或 COMICS 表而無需重啟 web 服務器。但是,假如您更改了數(shù)據(jù)庫配置文件(如 database.yml),則需要重啟服務器。 現(xiàn)在您可以使用 Web 瀏覽器來訪問位于您開發(fā)計算機中的 Rails Comic Catalog 應用程序。使用如下 URL: http://localhost:3000/comics/list瀏覽器應該顯示一個您的目錄中包含的漫畫書列表,如圖 1 所示。
圖 1:產(chǎn)品目錄表 當您使用 scaffold 創(chuàng)建 Rails Web 應用程序時,它會自動創(chuàng)建三個 Web 組件,您可以使用這些組件來查看一個含目標數(shù)據(jù)庫表所有記錄的列表,以及插入、更改和刪除該表中的記錄。圖 1 中顯示了一個列表,其中包含了您在本教程開始時執(zhí)行 SQL 腳本而向數(shù)據(jù)庫中插入的所有示例數(shù)據(jù)。 除了列表視圖外,本程序還提供詳情視圖。點擊任一“Show” 鏈接您就可以查看詳情頁,其中專門顯示某一記錄的數(shù)據(jù)。圖 2 即是這種頁面的一個示例。 圖 2:詳情頁 您還可以編輯數(shù)據(jù)庫表中的任一記錄。單擊“Back”鏈接,或使用瀏覽器的回退按鈕返回列表視圖頁,然后點擊任一記錄的“Edit”鏈接。圖 3 顯示了 COMICS 數(shù)據(jù)庫表中記錄之一的編輯視圖示例。 圖 3:編輯視圖 您也可以向 COMICS 表中添加新記錄,先返回列表視圖,單擊“New Comic”鏈接。然后您將看到一個插入視圖,它類似于圖 3,只是所有域都是空白的。 精通 Rails Product Catalog 示例展示了使用 Rails 可以很方便地創(chuàng)建一個極其簡單的表,但是這個表除用于跟蹤庫存外在其它方面并沒有很大的用處。您可以使用 Rails 創(chuàng)建復雜得多的 Web 應用程序,但這需要您花費一定的精力來研究和揣摩代碼。Rails 是一個易用的框架,但像任何技術一樣,要精通它還需一定的時間。這里,我只建議正進行全新應用程序開發(fā),通曉技術的人員和開發(fā)團隊使用 Rails。對于在此之外的,建議您等其成熟后再使用。 要真正精通 Rails,建議您閱讀一本書,雖然今年稍后會有一系列書涌現(xiàn),但目前市面上現(xiàn)有的一本優(yōu)秀著作是 Agile Web Programming with Ruby on Rails ,該書由 David Heninmier Hanson 和 Dave Thomas 合著完成,由 Pragmatic Bookshelf 在 2005 年出版。Hanson,眾所周知,是 Rails 之父,而 Thomas 則參與了 Programming Ruby:The Pragmatic Programmers' Guide(Pragmatic Bookshelf,第 2 版,2004)一書的編撰。

標簽:
Oracle
數(shù)據(jù)庫
排行榜
