使用Ajax和Ruby on Rails协同工作
Hacks 55-62
如果你仍未使用Ruby on Rails(RoR)来进行工作,你现在应该花些功夫去学习它。Ruby on Rails是一个Web开发框架,它使创建数据库驱动的Web应用变得非常简单。(框架是一种软件结构,它为开发者提供了脚本、包以及对象以用于构建他们自己的应用。)Ruby on Rails使用Ruby编程语言,包含了一个针对HTML或XML模版的Ruby嵌入版本,类似于JSP或PHP。Rails是框架的名称(或者包集合,譬如ActionController类),程序员可以使用它来开发Web应用。
提示:Ruby编程手册的第一版可见:http://www.ruby- doc.org/docs ProgrammingRuby/。您也可以在http: //www.math.umd.edu/dcarrera/ruby/0.3/找到另一个Ruby教程。
Ruby on Rails可以运行在Apache Web server,以及另一个开源服务器lighttpd上;它还有一个便捷的内建Web服务器,WEBrick,在本章中我们将使用这个。在2004年夏Ruby on Rails才拥有了自己的开发社区。但是,它的易用性、敏捷的设计,以及大量内建的特性诸如Ajax,以及针对许多流行数据库的自动的对象关系映射(ORM),已经给软件开发群体留下了深刻的印象。使用RoR建立一个可用的数据库驱动Web应用原型远比使用其他框架或从头做起更为快捷和高效。
合理的MVC
除了可以管窥Ruby高层设计的模型-视图-控制器(MVC)架构外,很难用简短的介绍来对这个框架作一个公正客观的评价。
MVC是将应用的三部分组件分离成不同的软件模块或代码单元的设计模式。分离的目的在于允许组件独立演化,从而解耦具有不同角色的软件对象,并且确保单一模块的变化不会意外的影响其他模块。模型(model)代表应用的数据或者状态,譬如数据库信息;视图(view)代表用户所见,譬如一个Web页面或者用户接口(UI);控制器(controller)是在应用中控制用户交互响应的部分(例如,处理键盘事件或者决定要显示的视图)。
RoR在它的运行时代码和目录结构里明确使用了MVC。这反映在它的子框架里:处理模型的Active Record,以及包含Action Controller和Action View块的Action Pack。(按照RoR文档所述,因为“严重的相互依赖性”这两者紧紧绑定在一起。)
本章的hacks概述与RoR工具和结构的相关内容。然而,RoR非常复杂,最佳的方法是在一台开发机器或者原型机上面安装它并进行相关的实践。
安装Ruby on Rails
安装一个封装了XMLHttpRequest创建和使用方法的很酷的Web应用框架。
本hack是在windows上安装Ruby on Rails;还包括在Mac Os X和Linux上安装与RoR的相关信息和指导。
提示:你可以按照详细的教程http://www.maczealots.
com/tutorials/ruby-on-rails/在Mac OS X Tiger(10.4.x)上安装Ruby on Rails。除此之外,你还可以在Mac OS X上安装一个all-in-one包,包括lighttpd Web服务器、SQLite数据库,以及RubyGems(按照前面教程所提到的“一个Ruby打包系统”,用它可以很简单地部署gems或小应用),这些可以从http://locomotive. sourceforge.net获得。Ruby编程语言本身已经被包含在Tiger中了;你可以打开一个Terminal(终端)窗口,输入ruby-v命令来查看Ruby的版本。在Fedora Linux系统上安装Ruby on Rails的信息可见http://www.Digitalme-
diaminute.com/howto/fc4rails/。
开始开发Rails Web应用之前,要安装以下软件:
l Ruby(使用RoR,至少需要1.8.2版本)
l Rails框架
l 你所选用的数据库,譬如SQLite3或MySQL
步骤一:安装Ruby
安装Ruby实在是再简单不过了:
1. 从http://rubyforge.org/projects/rubyinstaller下载最新的一键式Ruby Installer for Windows。在本书写作时,最新的版本是ruby182-15.exe。
2. 双击已下载的可执行文件,按照安装指示进行操作。除非你有特殊需要,否则按回车键接受默认的设置即可。
提示:另一个Windows上的一站式Ruby on Rails安装解决方案是Instant Rails,可见http://instantrails.
rubyforge.org/wiki/wiki.pl? Instant_Rails。它包含Ruby、Rails、Apache以及MySQL,“一切都预先配置好了,可以快速执行。”这是为Windows设计的,但已经有为Linux、Mac OS X以及BSD创建包的计划。
步骤二:安装Rails
现在你可以使用RubyGems包管理器来下载和安装Rails0.9.4(本hack所使用的版本)了:
1. 打开命令行窗口执行以下命令:
gem install rails –remote.
2. RubyGems还将安装Rails所依赖的所有其他包。你会被询问是否要安装每个包,每个问题都回答“y”(yes)就可以了。
图7-1显示了在命令行窗口中的安装过程。
最后,如果你还没有数据库服务器,你需要安装一个。Rails支持包括PostgreSQL、SQL Server、DB2以及Oracle在内的许多不同的数据库。MySQL是最常和Ruby on Rails一起使用的数据库,它可以很容易地安装在Windows、Mac OS X以及Linux等操作系统上。

图7-1:使用RubyGems安装Rails
提示:您可以在站点http://dev.mysql.com/downloads/ mysql/5.0.html下载Windows、Mac OS X以及Linux版本的MySQL5.0社区版安装工具。
创建一个空的Rails Web应用
Rails既是一个运行时Web应用框架,也是帮助脚本的集合,这些脚本可以在你开发一个Web应用时帮助你自动化很多事情。本hack中,我们将使用其中的一个帮助脚本来创建完整的目录结构以及初始文件集合来开始“cookbook”应用:
1. 打开命令行窗口,导航至您想创建cookbook Web应用的位置。在这儿是c:\rails。
2. 执行命令rails cookbook。
这个命令创建了一个cookbook子目录,它是一个完整的目录树,其中包含空的Rails应用的文件和文件夹。
测试这个空的Web应用
事实上Rails Web应用可以运行在任何Web服务器上,但开发Rails Web应用最常使用的是内置的WEBrick Web服务器。下面让我们来启动这个Web服务器,浏览我们的cookbook应用。在你打开的命令行窗口中,进入cookbook目录。执行命令ruby script/server启动服务器。你可以看到如图7-2所示的情形。

图7-2:启动WEBrick服务器
不要关闭命令行窗口,从而保证Web服务器运行,在后面我们将用到它。现在打开你的浏览器,浏览http://127.0.0.1:3000/或者http://localhost:3000/。你可以看到如图7-3所示的页面。
提示:如果你没有按照前面的指导来安装Rails,这些链接可能不会起作用。不要惊慌,127.0.0.1是本地机器的环回地址。
Rails应用的目录结构
RoR会努力最小化你所需要做的决定以减少不必要的工作。当你使用RoR帮助脚本创建空应用时,它创建了应用完整的目录结构(见图7-4)。Rails知道在目录结构的哪儿找到需要的东西,所以你没有必要告诉它。记住,没有配置文件!
以下是如何使用这些目录的纲要:
l controllers子目录是Rails寻找控制器类的地方。控制器处理用户发起的Web请求。
l views子目录容纳显示模版,这些模版可以填充我们应用的数据,转化为HTML并返回到用户的浏览器端。
l models子目录包含模型类,这些类对存储在我们应用的数据库中的数据进行了建模和封装。在大多数框架中,应用的这部分非常混乱,冗长并充满

图7-3:立刻,Ruby on Rails
错误。而Rails则绝对简单!
l helpers子目录包含模型、视图和控制器类的辅助类。这些类使模型、视图以及控制器代码少而整洁,注意力完全集中在其自身业务上。
下面是和RoR一起使用的MySQL的典型配置文件(“#”字符代表一行注释):
#
MySQL (default
setup默认安装).推荐使用4.1和5.0版本
#
#获得快速的C绑定:
# gem install mysql
# (on 在OS X系统上: gem install mysql --
--include=/usr/local/lib)
#确保使用新式的password hashing:
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
adapter: mysql
database: Energy
username: root

图7-4:Rails放原料的位置
password:
#socket: /path/to/your/mysql.sock
#连接TCP socketConnect on
a TCP socket.。 If omitted如果省略,适配器将连接由socket
#给定的域socket。
host: localhost
port: 3306
提示:下面是两个常用的RoR命令,你可以用它们来自动生成应用文件。第一个命令:
ruby script/generate model cookbook
生成了应用的数据库表的模型对象(如果数据库表名为cookbook)。第二个命令:
ruby script/generate controller hacks
生成名为hacks的Web应用路径的控制器对象。
——Curt Hibbs






