開始之前
Ruby on Rails 在去年已經成為發展最快、最流行的開放源碼 Web 應用程序開發框架之一。但因為其專注於構建 HTML 應用程序,一些人批評 Rails 不夠靈活。尤其是隨著富 Internet 應用程序 (RIA) 的興起,這些應用程序使用一些技術來復制桌面應用程序功能,比如使用 Flash 進行用戶界面開發,使用 XML 進行數據傳輸,開發源碼開發人員想知道是否有一種方法可以容易地創建一種 RIA,這種 RIA 可以利用 Ruby 的純面向對象語言和 Rails 的惟一快速應用程序開發特性。
關於本教程
本教程將為您展示 Web 開發中兩個最熱門的平台:Ruby on Rails 和 OpenLaszlo,前者用於娛樂和快速 Web 應用程序開發,後者是開放源碼 RIA 服務器。您將看到使用這些平台可視地創建在 Web 上部署和管理的吸引人的類似桌面的應用程序是多麼容易。
雖然本教程並非講授 Ruby 或 Laszlo,但它將展示使用開放源碼 OpenLaszlo Presentation 服務器和 MySQL 來結合使用 Rails 與 RIA 是多麼容易。它還將介紹如何配置 Eclipse 以設置 Rails 和 Laszlo 開發環境、自動化瑣碎任務以及創建通過 Representational State Transfer (REST) Web 服務與 Rails 交互的簡單 Laszlo 客戶機。
前提條件
要從本教程獲得最大收益,您應該基本了解編程、XML 和 SQL。
系統需求
您將需要下列工具:
Eclipse Web Tools Platform (WTP) all-in-one bundle 或帶有 WTP 和所有必要擴展的 Eclipse V3.1/3.2
OpenLaszlo
IDEforLaszlo V4
MySQL V5.0
Ruby V1.8.4(one-click 安裝程序)
Rails V1.0(注意,使用最新的 Ruby 和 Rails V1.1 會出現問題)
Java 技術 V1.4 或 1.5
Subversion 客戶機
還要求系統至少有 512 MB 的 RAM。
設置
本教程使用的幾個應用程序和工具需要非常長的設置過程。完成之後,您將具有完美的開放源碼環境來構建 RIA。在本節中,您將安裝 MySQL、OpenLaszlo Presentation Server、Ruby、Rails、Eclipse WTP all-in-one 包、Ruby Development Tools (RDT) 和 IDEforLaszlo。
安裝 MySQL
數據庫使用 MySQL。按照下列步驟進行安裝:
下載 MySQL。在撰寫本文時,最新版本是 V5.0。
雙擊安裝程序。
接受所有默認值,確保記住為 MySQL 帳戶使用的登錄名和口令。
出現提示時,選擇 Execute,將會安裝 MySQL。
現在已經設置並安裝了 MySQL,接下來設置 OpenLaszlo V3.2。
安裝 OpenLaszlo V3.2
OpenLaszlo 可用於多個操作系統上,但對於本教程,將使用用於 Windows® 的安裝程序。下載安裝程序之後:
雙擊 openlaszlo-3.2-windows-dev-install.exe。
閱讀許可協議,並單擊 I Agree 接受。
選擇安裝 OpenLaszlo 服務器的目錄(將使用 C:\OpenLaszloServer3.2),然後單擊 Install。
單擊 Finish。
取決於您的系統,Laszlo 可能要花一段時間來安裝。Laszlo 完成安裝之後,它將啟動 Laszlo Presentation 服務器並啟動默認表示服務器。應該會看到如圖 1 所示的內容。
圖 1. OpenLaszlo 服務器
除文檔之外,OpenLaszlo 資源管理器還包含大量信息,比如演示代碼和互動教程。
還需要最後一個步驟讓 IDEforLaszlo 與 Eclipse 一起工作。導航到 C:\whereyouinstalledlaszlo\Server \lps-3.2\WEB-INF\lib,例如 C:\OpenLaszloServer3.2\Server\lps-3.2\WEB-INF\lib,並創建名為 makelaszlowork3.1.txt 的測試文件。沒有該文件,您將無法讓 IDEforLaszlo 插件工作。
注意:插件被硬編碼以查找 3.1 的特定上下文根,所以如果不添加該文件,使用最新版本的 Laszlo 將導致問題。
安裝 Eclipse WTP
Eclipse WTP 項目專注於擴展 Eclipse 平台以構建 Web 應用程序(特別是 Java™ 2 Enterprise Edition (J2EE),但毫不費力地,它可以用於幾乎任何 Web 應用程序平台)。WTP 依賴於許多其他 Eclipse 項目,比如 Eclipse Modeling Framework (EMF) 和 Graphical Editing Framework (GEF)。所以對於本例,首先下載包括所有這些依賴項的 WTP all-in-one 包,以及一個 easy-to-use 包形式的 Eclipse。可以下載 WTP 以及關聯的依賴項,並安裝它們,但本教程中將不介紹這些內容。
注意:如果已經安裝了 Eclipse,但還想嘗試安裝 WTP all-in-one 包,那麼也可以。雖然本教程不建議這樣做,但可以讓兩個版本共享同一工作區,從而允許您查看以前使用其他版本的 Eclipse 創建的項目。
要設置 WTP all-in-one 包:
下載 wtp-all-in-one-sdk-1.0-win32.zip。
將 wtp-all-in-one-sdk-1.0-win32.zip 解壓到目錄中,比如 C:\software\eclipseWTP。
在解壓包的目錄中應該會看到 eclipse.exe。可以通過雙擊該 .exe 啟動 Eclipse IDE,或者使用更好的方法,即右擊 .exe,將其拖至桌面,釋放右鼠標按鈕。應該會彈出一個菜單,詢問您是否想要創建快捷方式。創建快捷方式。雙擊快捷方式可以啟動 IDE。現在這樣做。
Eclipse 將啟動並提示您選擇一個工作區。默認值通常類似 c:\Documents and Settings\userid\workspace。現在選擇 Default。稍後可以更改工作區。
現在應該會看到如圖 2 所示的內容。
圖 2. 第一次啟動時的 Eclipse 歡迎屏幕
在這裡,選擇右上角的大彎箭頭。將鼠標移動到箭頭上時,它將顯示 To Workbench。單擊它,將會轉到 Eclipse IDE V3.1 的默認視圖。
接下來,需要設置 Eclipse 以使用 Laszlo。
Laszlo 的 IDE
OpenLaszlo 具有自己的 Eclipse 插件,允許您容易地編輯、更新、使用拖放組件可視地設計,甚至預覽您的 Laszlo 應用程序。要安裝 IDEforLaszlo:
取決於系統上已有的 Java 版本(撰寫本文時為 laszloIDE-0.1.0b-jdk1.5.zip),下載最新的 IDE 版本的 zip。
啟動 Eclipse WTP。
當 Eclipse IDE 啟動時,轉到 Select Help > Software Updates > Find and Install。
在 Feature Updates 頁面上,選擇 Search for new features to install,應該會看到如圖 3 所示的界面。然後單擊 Next。
圖 3. 用於安裝新 Eclipse 插件的 Install/Update 向導
在 Update sites to visit 頁面上,單擊 New Archived Site。
浏覽並找到 laszloIDE-0.1.0b-jdk1.5.zip 文件,然後單擊 OK。應該會看到如圖 4 所示的界面。
圖 4. 選擇用於安裝的 LaszloIDE 存檔
在 Edit Local Site 對話框上,單擊 OK 確認 zip 位置。
返回 Update sites to visit 頁面(見圖 5),laszloIDE-0.1ob-jdk1.5.zip 已選中,單擊 Finish。
圖 5. 選中 LaszloIDE 存檔以確保安裝它
在 Search Results 頁面上,選中 laszloIDE-0.1ob-jdk1.5.zip,然後單擊 Next。
在 Feature License 頁面上,閱讀並接受許可,然後單擊 Next。
在 Installation 頁面上,單擊 Finished。
在 Feature Verification 頁面上,單擊 Install All。
提示重啟時,單擊 Yes。
重啟之後,應該首先處於 Laszlo 視圖中。此時,只需要設置 Ruby 和 Rails,並為 Rails 自定義 Eclipse,然後就可以創建 Laszlo on Rails 應用程序了。
設置 Ruby 和 Rails
對於 Windows 用戶,設置 Ruby 最簡單的方法是下載 one-click 安裝程序。可以下載最新的 .exe(在撰寫本文時為 ruby184-16p3.exe)。
注意:還可以從 Ruby-lang.org 下載 Ruby 或其源代碼,但 one-click 安裝程序因為包括了 Ruby 和許多其他有用的工具而讓您的工作更加輕松。
下載 one-click Ruby 安裝程序之後:
雙擊安裝程序。出現提示時,選擇要安裝到的目錄。對於本教程,使用 C:\Ruby,但您可以選擇驅動器上的任意位置。
Ruby 安裝之後,通過 Start > Run 轉到命令提示符,然後鍵入 cmd。
通過在命令提示符處鍵入 gem install rails --include-dependencies,安裝 Rails。
這將開始下載 Rails 並開始安裝。將會提示您多次以安裝必需的依賴項。在每次提示時鍵入 y,您應該會看到如圖 6 所示的界面。
圖 6. 使用 Ruby gem install rails 時來自命令行的結果
Rails 現在應該已安裝。接下來設置 Eclipse,以便您可以編輯 Ruby 文件並自動化通常與 Rails 項目關聯的一些命令行瑣事。
在 Eclipse 上設置 RDT
RDT 插件為 Eclipse 用戶提供了開發代碼時期望的標准接口和工具,不過它是針對 Ruby 用戶設計的。在本節中,您將學習如何安裝 RDT 插件並自定義 Eclipse 環境,以避免使用標准文本編輯器開發 Ruby on Rails 應用程序時通常需要的一些命令行瑣事。所以,要將 RDT 插件安裝在您的 Eclipse 版本上:
確保 Eclipse 在運行。
轉到 Help > Software Updates > Find and Install。
選擇 Search for new features to install 並單擊 Next。
轉到 New Remote Site。
對於站點名稱,使用 Ruby Development Tools。
對於 URL,使用 http://updatesite.rubypeople.org/release。
單擊 OK。
選中 RDT 的復選框並單擊 Next。
選擇特性 RDT 並單擊 Next。
確認與安裝未簽名插件相關的任何消息。
RDT 應該已安裝,然後將提示您重啟 Eclipse。選擇 OK。
現在想要配置環境以便在 Eclipse 中使用 Ruby 和 Rails。啟動 Eclipse,然後:
轉到 Window > Preferences,並從 Preferences 樹中展開 Ruby。
選擇 Installed Interpreters。
單擊 Add。
輸入 Ruby 作為解釋程序名稱。
輸入 ruby.exe 文件的路徑(通常為 C:\ruby\bin\rubyw.exe)。應該會看到如圖 7 所示的界面。
圖 7. Eclipse Preferences 窗格
選擇 OK。
然後選擇 OK 關閉 Preferences 窗格。
既然已經設置了 Ruby,您希望使用 Eclipse 以便更容易地與 Rails 一起工作。您將設置 Eclipse,以便它調用外部 Rails 腳本,而無需您轉到命令行手動鍵入。如果您是一位日常的 Rails 用戶或有意於結合使用 Rails 與 Eclipse,請記住此處使用的技術,它們還可用於運行日常的 Rails 腳本操作。
在下一節中,您將使用 Eclipse 的能力將命令傳遞給 Windows 命令行以自動化這些任務。
使用 Eclipse 啟動外部 Rails 腳本
Rails 提供了許多腳本,可以自動化設置 Rails 項目時的許多工作。首先是 Rails 命令,為您的 Rails 項目自動創建文件系統。還有許多其他命令允許您啟動內部 Web 服務器、運行構建腳本、生成功能代碼、創建應用程序骨架(腳手架 ),等等。這些腳本通常從命令行運行,如果您必須在 IDE 與命令行之間來回移動,這將非常煩人。在本節中,您將學習如何使用 Eclipse 從 Eclipse 環境內部啟動這些腳本。您將多次使用這種技術,第一個要自動化的腳本是用於構建 Rails 項目的腳本。
注意:您應該知道這些設置與您的工作區相關聯。如果更改工作區,您將需要重新配置這些選項,希望 RDT 的優秀開發人員有一天會將該能力構建到插件中,以便它們可以顯示在上下文菜單中。
設置 Eclipse 以創建 Rails 項目
首先,將 Eclipse 打開至 Ruby 視圖,然後:
轉到 Window > Open Perspective > Other,然後選擇 Ruby。
選擇 Run > External Tools > External Tools。
從配置樹中選擇 Program。
選擇 New 創建新程序。
對於 name,輸入 Create Rails Project。
對於 Location,輸入 C:\ruby\bin\rails.cmd。
對於 Working Directory,輸入 ${project_loc}/${project_name}。
對於 Arguments,輸入 {project_name}。
轉到 Refresh 選項卡並選擇它。選中 Refresh Resources Upon Completion。
選擇 Common 選項卡,找到 Display in Favorites Menu 區段,並選中 External Tools。
Apply。
從 External Tools 選擇 Create Rails Project 時,它將在您的項目目錄中自動構建 Rails 項目。
接下來設置 Eclipse 以下載簡單叫做 OpenLaszlo Rails Plug-in 的 Rails 插件。OpenLaszlo Rails Plug-in 由 Oliver Steele 開發,允許您通過提供生成器和腳手架容易地設置並構建 OpenLaszlo 客戶機。
設置 Eclipse 以安裝 OpenLaszlo Rails 插件
對於要使用 OpenLaszlo Rails 插件的每個 Rails 應用程序,都需要調用一次該插件。腳本下載該插件並將它安裝在您的 Rails 項目中。為了該步驟工作,您必須安裝了 Subversion 客戶機。按照下列指示:
選擇 Run > External Tools > External Tools。
從配置樹中選擇 Program。
選擇 New 創建新程序。
對於 Name,使用 Setup Openlaszlo plug-in。
對於 Location,輸入 C:\ruby\bin\ruby.exe。
對於 Working Directory,使用 ${project_loc}/${project_name}。
對於 Arguments,使用 ./script/plugin install svn://rubyforge.org/var/svn/laszlo-plugin/tags/openlaszlo。
轉到 Refresh 選項卡並選中 Refresh Resources Upon Completion。
轉到 Common 選項卡,找到 Display in Favorites Menu 區段,並選中 External Tools。
Apply。
要安裝 OpenLaszlo 插件,不需要轉到命令行並輸入如下內容:
>Ruby ./script/plugin install \
svn://rubyforge.org/var/svn/laszlo-plugin/tags/openlaszlo
從 External Tools 中選擇 Setup OpenLaszlo plug-in。
讓我們設置另一個外部腳本調用以創建 REST 控制器。
設置 Eclipse 以生成 REST 控制器
您希望能夠讓 Ruby 使用 OpenLaszlo 插件自動創建 REST 控制器。REST 是創建簡單的基於 XML 的 Web 服務的常見架構方法。OpenLaszlo 使用 XML 與 Rails 通信,Rails 需要能夠從 OpenLaszlo 接受 XML 並傳遞 XML。在大多數應用服務器環境中,開發 REST XML API 可能是一種痛苦,但使用 OpenLaszlo 插件,只需簡單地調用單個腳本。
打開 Eclipse,然後:
選擇 Run > External Tools > External Tools。
從配置樹中選擇 Program。
選擇 New 創建新程序。
對於 Name,使用 Generate REST Controllers。
對於 Location,使用 C:\ruby\bin\ruby.exe。
對於 Working Directory,使用 ${project_loc}/${project_name}。
對於 Arguments,使用 ./script/generate rest_controller ${project_name}。
轉到 Refresh 選項卡並選中 Refresh Resources Upon Completion。
轉到 Common 選項卡,找到 Display in Favorites Menu 區段,選中 External Tools,然後選擇 Apply。
不管什麼時候需要,都可以立即單擊該按鈕讓 OpenLaszlo 創建 REST 控制器。
接下來,想要讓 Ruby 使用 OpenLaszlo 插件生成骨架或腳手架 OpenLaszlo 應用程序。
設置 Eclipse 以創建 Laszlo applet
Rails 的一個非常酷的功能是它可以自動化 Web 應用程序開發的許多瑣事。Rails 最佳特性之一是它功能創建映射到數據庫的腳手架(或簡單的 Create、Retrieve、Update 和 Delete (CRUD) HTML 接口),該特性允許您快速建立好接口,然後在此基礎上自定義應用程序表示。它提供了構建應用程序的腳手架。
OpenLaszlo 插件允許幾乎相同的特性。通過調用 OpenLaszlo 腳本/生成 applet,OpenLaszlo 可以創建可用於應用程序的腳手架客戶機。要自動化該操作以從 Eclipse 調用,而非從命令行調用,則打開 Eclipse,然後:
選擇 Run > External Tools > External Tools。
從配置樹中選擇 Program。
選擇 New 創建新程序。
對於 Name,使用 Create Laszlo Applets。
對於 Location,使用 C:\ruby\bin\ruby.exe。
對於 Working Directory,使用 ${project_loc}/${project_name}。
對於 Arguments,使用 ./script/generate applet ${string_prompt:Applet name} applet。
轉到 Refresh 選項卡並選中 Refresh Resources Upon Completion。
轉到 Common 選項卡,找到 Display in Favorites Menu 區段,並選中 External Tools。
Apply。
要設置的最後一個外部工具允許您啟動將用於開發的 Rails 內部 Web 服務器。該 Web 服務器叫做 WEBrick。在下一節中,您也要將其設置為外部工具。
從 Eclipse 調用 Rails WEBrick
Rails 附帶有自己的簡單 HTTP 服務器,創建用於構建和測試應用程序。通常從 Rails 應用程序目錄(比如 Ruby script/server)中調用 Rails,但需要盡可能地呆在 Eclipse 環境中以允許您僅使用一個工具,從而您可以專注於開發應用程序。要設置 Eclipse 調用 WEBrick,打開 Eclipse,然後:
選擇 Run > External Tools > External Tools。
從配置樹中選擇 Program。
選擇 New 創建新程序。
對於 Name,使用 Start WEBrick。
對於 Location,使用 C:\ruby\bin\ruby.exe。
對於 Working Directory,使用 ${project_loc}/${project_name}。
對於 Arguments,使用 script\server。
轉到 Refresh 選項卡並選中 Refresh Resources Upon Completion。
轉到 Common 選項卡,找到 Display in Favorites Menu 區段,並選中 External Tools。
Apply。
現在,當您測試 Rails 應用程序時,可以簡單地從 Eclipse 啟動和關閉 Rails 開發服務器。
注意:WEBrick 是 Rails 開發 Web 服務器,不能用於生產。咨詢 Ruby on Rails Web 站點獲得有關設置 Rails 以使用特定生產 Web 服務器的更多信息。
提示:對於已經使用 RTD 或計劃創建更多典型的 Rails 應用程序的開發人員來說,使用上述技術可以自動化幾乎所有的通常使用的命令行調用(比如生成腳手架或模型)。嘗試一下,您將很快發現使用 Eclipse 可以顯著增加開發時間。不再需要在命令行上輸入!
創建簡單的電影列表
似乎您花費了整個教程來設置 Eclipse,而非開發應用程序,的確如此。很快您將看到,在教程其余部分中開始創建簡單的富 Internet 應用程序時,幾乎不需要任何工作就可以快速創建腳手架或骨架應用程序。
創建數據庫
您需要為您的應用程序創建一個數據庫。大多數 Rails 應用程序首先需要開發數據庫。Ruby on Rails 的有趣方法之一是 “約定優於配置(convention over configuration)” 的思想,這在本質上意味著 Rails 強制實施特定的命名約定,從而允許 Rails 使用反射和發現以探知需要了解的有關應用程序的所有信息。然後 Rails 就可以自動化 Web 服務的許多瑣事,並移除了對復雜 XML 配置文件的需要。接下來構建數據庫,您將很快明白我的意思。
提示:還可以使用 Eclipse 與數據庫交互和開發數據庫。
對於您的數據庫,您要使用一個簡單的表來創建您喜歡的電影的列表,並允許您對這些電影進行評級。為此,您將使用 MySQL 命令行客戶機,但如果您更喜歡使用特定的 MySQL 客戶機,那麼盡管使用吧。
構建數據庫
要創建數據庫:
轉到 Start > MySQL > MySQL 5.0 > MySQL Command Line。
登錄。
在提示符處鍵入 create database movies;,然後按 Enter。
在提示符處鍵入 grant all on movies.* yourlogin@localhost;,然後按 Enter。
使用該 SQL 創建電影表:
清單 1. 創建電影表的 SQL
CREATE TABLE Movies (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
movie_name CHAR(30) NOT NULL,
movie_genre CHAR(30) NOT NULL,
movie_description TEXT NOT NULL,
movie_rating MEDIUMINT,
PRIMARY KEY (id)
);
接下來創建 Ruby on Rails 項目並開始開發應用程序。
創建 Rails 項目
現在應該使用 Eclipse 創建 Ruby on Rails 項目了。確保運行了 Eclipse 編輯器。
創建電影項目
執行如下操作創建新項目:
確保處於 Ruby 視圖中。否則,則轉到 Windows > Open Perspective > Other,然後選擇 Ruby。
轉到 File > New > Project > Ruby。
輸入項目名稱 movies 並使用默認工作區。然後應該會在 Ruby Resources 窗格中看到名為 movies 的文件夾。
轉到 Run > External Tools > Setup Rails。只要這樣做,就會立刻看到彈出的進度條。完成之後,應該會在 Eclipse Console 中看到如圖 8 所示的內容。
圖 8. 運行 External Tools Setup Rails 時 Eclipse 控制台中的示例輸出
查看 Ruby Resources 窗格,應該會看到很多目錄。運行該 Rails 外部工具時,它不僅構建所有這些目錄,還會創建一些文件。
告訴 Rails 要使用的數據庫
在 Rails 中要設置的一個配置文件是 database.yml 文件,它告訴 Rails 要用於開發、測試或生產的數據庫。如果從 Eclipse 查看 Rails 項目,應該會看到名為 config 的目錄。找到之後:
展開 config 文件夾並雙擊 database.yml 文件。
應該會看到包含很多數據庫配置信息的文件。如清單 2 所示對其進行編輯,但是要輸入您的數據庫用戶名和口令。
清單 2. 配置 database.yml 文件
development:
adapter: mysql
database: movies
username: yourusername
password: yourpassword
socket: /path/to/your/mysql.sock
test:
adapter: mysql
database: movies
username: yourusername
password: yourpassword
socket: /path/to/your/mysql.sock
production:
adapter: mysql
database: movies
username: yourusername
password: yourpassword
socket: /path/to/your/mysql.sock
轉到 File > Save 或者就使用 Ctrl+S 保存文件。
安裝 OpenLaszlo Rails 插件
現在需要將 OpenLaszlo 安裝到應用程序目錄中。轉到 Run > External Tools > Setup OpenLaszlo。應該會看到如圖 9 所示的內容。
圖 9. 當 OpenLaszlo 插件安裝在 Rails 應用程序目錄中時命令行的輸出
現在可以使用 OpenLaszlo 插件為簡單應用程序自動創建 REST XML 接口了。
再一次,轉到 Run > External Tools > Generate REST Controllers。觀察 Eclipse 控制台。應該會看到 OpenLaszlo 插件創建了很多文件,其中包括 Rails Model 和 Rails Controller。
查看電影模型
通過導航到 apps > models > 並雙擊 movie.rb 查看控制器的模型。應該會看到如下代碼:
class Movie < ActiveRecord::Base
end
這兩行代碼展示了 Rails 的強大功能。class Movie 這一行實際上創建一個 Movie 對象,然後 Rails 可以將之映射到數據庫中的電影表。Rails 可以這樣做是因為它為數據庫使用了特定命名約定,允許它將使用單數命名約定(此處為 Movie)的模型映射到總以復數形式命名的表。
Rails 還創建用於訪問表中的行和屬性的方法。Rails 這樣做的方法是實現 ActiveRecord 模式,該模式允許 Rails 創建一個知道有關與數據庫交互時需要的所有信息的類。
提示:閱讀 “Crossing borders: Exploring Active Record”,了解有關 ActiveRecord 和數據庫包裝器如何工作的更多信息。
雖然您可能認為這是一個局限性,但很少出現您無法使用這些命名約定創建數據庫的情況。對於那些您必須使用遺留數據庫方案或者需要一些違反該約定的特定名稱的極端情況,可以不予考慮。
查看電影控制器
下面來看應用程序的 Rails 控制器。導航到 movies > app > controllers > movie_controller.rb,然後雙擊打開。代碼應如清單 3 所示。
清單 3. movie_controller.rb 文件
class MovieController < ApplicationController
# The following line defines methods that implement the OpenLaszlo
# REST API.
#
# To replace this file with a file that contains explicit method
# definitions, execute:
# script/generate rest_scaffold movie
rest_scaffold :movie
end
再一次,Rails 創建的 Ruby 代碼只有兩行。難以想像幾次鼠標點擊實際上已經創建了一個 REST XML Web 服務(尤其是您具有使用 J2EE 應用程序的經驗時)。我們來確認一下。通過轉到 Run > External Tools > Start WEBrick 啟動 Rails Web 服務器。啟動您喜歡的浏覽器並轉到 http://localhost:3000/movie。應該會看到如圖 10 所示的內容。
圖 10. 電影控制器生成的 XML 示例
實際上是從數據庫生成 XML 的。
接下來生成 Laszlo 腳手架。首先通過單擊 Eclipse 控制台上的紅色 Stop 按鈕停止 WEBrick 服務器。
Rails 為您生成方法
為了幫助更好地理解正在進行的工作,讓我們看一下由 OpenLaszlo 生成的代碼,其中使用了命令 script/generate rest_scaffold movie 以創建顯式寫出腳手架的每個方法的控件。
清單 4. Rails 快速創建方法
class MovieController < ApplicationController
# The following line can be used instead of the generated definitions
# of records, page, schema, create, etc. The generated definitions
# are provided as a starting point in case you need to modify them.
#
#rest_scaffold :movie
def records
# The default route places the range list in the id parameter.
# Retrieve it from there so that this action works with the default
# route.
ranges = RangeList.parse(params[:id] || '', :domain_start => 1)
options = {}
options[:conditions] = ranges.to_sql_condition unless ranges.empty?
records = Movie.find :all, options
count = Movie.count
response.headers["Content-Type"] = "text/xml"
render :text => RestHelper::records_xml(records, count)
end
alias_method :index, :records
def page
ranges = RangeList.parse params[:id], :domain_start => 1
records = Movie.find_pages ranges
count = Movie.count
response.headers["Content-Type"] = "text/xml"
render :text => RestHelper::records_xml(records, count)
end
alias_method :pages, :page
def schema
response.headers["Content-Type"] = "text/xml"
render :text => RestHelper::schema_xml(Movie)
end
def create
values = params['id'].split('&').map {|s| s.split('=', 2)}
record = Movie.new(Hash[*values.flatten])
response.headers["Content-Type"] = "text/xml"
if record.save
render :text => "<create>#{record.id}</create>"
else
render :text =>
"<error>#{record.full_messages.join("\n")}</error>"
end
end
def update
values = params['id'].split('&').map {|s| s.split('=', 2)}
attributes = Hash[*values.flatten]
id = attributes['id']
attributes.delete 'id'
record = Movie.find id
record.attributes = attributes
response.headers["Content-Type"] = "text/xml"
if record.save
render :text => "<update>#{record.id}</update>"
else
render :text =>
"<error>#{record.full_messages.join("\n")}</error>"
end
end
def delete
ranges = RangeList.parse params['id'], :domain_start => 1
conditions = ranges.to_array :first_index => 1
Movie.delete_all conditions
response.headers["Content-Type"] = "text/xml"
render :text => "<deleted id='#{id}'/>"
end
end
可以看到,Rails 創建了許多簡單的 CRUD 方法。再一次,Rails 足夠靈巧以快速創建方法,但要自定義這些方法或創建您自己的方法,可以從該文件查看如何進行。
接下來創建 Laszlo 客戶機以查看 Rails 電影模型和控制器。
創建簡單的 Laszlo 客戶機
生成 Laszlo 腳手架
接下來創建您的 Laszlo XML:
轉到 Run > External Tools > Generate Applet,當提示您輸入 Applet Name 時,輸入 movie。注意,這將不會生成提供視圖的 Laszlo .lzx 文件。
一旦生成器創建 Laszlo 視圖之後,轉到 Ruby Resource 窗格並查找目錄 app。
展開 app 目錄並選擇 applets > applet。應該會在 applet 目錄中看到 applet.lzx,以及三個文件:datamanager.lzx、modelcontroller.lzx 和 modelgrid.lzx。
通過使用 Window > Show View > Other 切換到 IDEforLaszlo 視圖,然後選擇 Laszlo。應該會看到如圖 11 所示的內容。
圖 11. 從 Eclipse 中 IDEforLaszlo 視圖看到的 OpenLaszlo 插件生成的 .lzx 示例
創建 OpenLaszlo 項目
OpenLaszlo 插件為您創建很多文件。在 movies\app\applets 下應該會看到三個文件:datamanager.lzx、modelcontroller.lzx 和 modelgrid.lzx。在 movies\app\applets\applet 下,應該會看到 applet.lzx。既然有了 Laszlo 代碼,現在需要在 C:\OpenLaszloServer3.2\server\lps-3.2\my-apps 下創建 Laszlo 項目,以便您可以在 Laszlo Presentation Server 上運行得到的已編譯 Laszlo .lzx 文件。按照下列步驟創建新 Laszlo 項目:
在 Eclipse 中,轉到 File > New > Laszlo Project。
在 New Laszlo Project 向導中,輸入 Movie Client 作為項目名稱,然後取消選擇 Use default。這將允許您編輯 workspace 目錄。浏覽到或輸入 OpenLaszlo Server my apps 目錄的路徑。對於本教程,使用 C:\OpenLaszloServer3.2\server\lps-3.2\my-apps。應該會看到如圖 12 所示的界面。選擇 Finish。
圖 12. movieclient 的 New Laszlo Project 向導
打開 Rails 項目並導航到 movie > app > applets,然後右擊 applets 文件夾並選擇 Copy(或使用 Ctrl+C)。
導航到名為 movieclient 的新 Laszlo 項目,將 applets 文件夾直接復制到 \src 文件夾。
打開浏覽器到 http://127.0.0.1:8080/lps-3.2/my-apps/movieclient/bin/applets/applet/,應該會看到名為 applet.swf 的文件。單擊該文件。應該會看到如圖 13 所示的界面。
圖 13. 從浏覽器看到的 Laszlo on Rails movieclient
試著單擊其中一個字段,您將注意到,如果更改一個字段並移動到下一字段,數據庫將自動更新。還可以通過向下滾動並在字段中鍵入新記錄來添加新記錄。
結束語
您已經了解到 Web 應用程序開發中兩種最熱門的趨勢:Ruby on Rails 和使用 OpenLaszlo V3.2 的富 Internet 應用程序開發。此外,您還學習了如何使用 Eclipse 創建快速開發環境,不僅可以編寫和編輯代碼,還可以自動化 Rails 和 Laszlo 項目的設置和配置。
您使用了 Rails 和 OpenLaszlo 插件來草擬應用程序的原型。在一些情況下,這足以滿足您的需要。但在大多數情況下,您將需要創建更復雜的 Rails 模型、編輯控制器以及編寫更復雜的 Laszlo .lzx 文件。但是,正如您所看到的,使用 Eclipse 可以極大地減少構建富 Internet 應用程序所需的時間量。