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

排行榜
