查看文章
 
初涉 Ruby On Rails
2006年11月06日 星期一 10:22

如果你喜欢,你可以抱着笔记本,泡在浴缸里来看这篇文章。也许你会疑惑:“为什么我需要一种新的脚本解释语言?为什么不使用到处可见的

Perl或者PHP,也许Python和Unix Shell也不错。为什么人们整天在谈论Ruby呢?”

  正如很多精彩的事情一样,虽然日本人在90年代就发明了Ruby,但Ruby一直到最近才得到人们的关注。Ruby是纯面向对象语言。所有的东

西全是对象(很酷吧),即便是整数和字符串都有内在的方法和属性。举个例子:

print "Webmokey".reverse
得到的就是

"yeknombeW"
Ruby简洁、灵活的语法很容易学习和使用,也很有趣。Ruby对于C语言和Perl语言的老用户来说更是感觉很亲切。

为什么说Rails很酷

  正是Rails的出现使得Ruby得到了更多的关注,Rails是使用Ruby开发Web应用程序的框架。目前Ruby on Rails已经被用来开发高度可定义

的网站,如:Basecamp 和 Backpack。

  Rails不仅仅是把Ruby联系在WEB上的万能胶。当然,你可以把Ruby脚本作为Apache的CGI来调用,从而不使用Rails仅使用Ruby来开发Web。

Rails是一整套建立结构与数据库操作通用代码的编程工具集。这极大的减轻了建立一个网站所需要的烦琐工作,同时也使代码结构更加紧凑和

健全,使开发变的更加容易。犹如在一个有优良组织结构的公司里工作,你可能需要花一点时间知道谁坐在哪里以及他们负责什么事务,但一

旦你理解了这个结构,你就可以避免整天在一些烦琐细小的事情上浪费时间。

  Rails使用MVC构架(Model-View-Controller,模型-视图-控制框架),它清晰的分离开了应用程序的数据库及表现(模型)、用户界面(

视图)和逻辑功能(控制)。这么做的好处目前还有争议,但如果你编写的是一个不整洁和不可共享的程序,那肯定是一件很烦琐的工作。使

用Rails开发相当容易,“我花了6个小时就轻易的在手机平台上建立了一个支持Ajax和ToDo列表管理的社会网络拍卖网站。”不论Rails是否真

的有那么好,这些激动人心的事——如成百上千的开发人员所说的建立一个WEB应用只需要24小时——是会传染的。现在让我们加入这个

群体!

安装Ruby和Rails

  为了便于和当前的WEB应用整合,Rails可以以CGI或FastCGI的方式运行在Apache下。可以使用它内置的WEB服务器——WEBrick运行,

WEBrick使用Ruby开发,默认端口为3000,因此你可以方便的在开发机器上使用WEBrick测试RoR应用程序。我们将从安装Ruby,然后安装Rails

(你同时需要一个数据库服务器,MySQL或PostgreSQL)开始。官方的安装说明更容易理解,比我希望的还要详细。目前Rails还没有Perl和PHP

那样普遍的得到虚拟主机提供商的支持。如果你想在一个虚拟主机上安装,方法可能会有所不同。你可以要求服务商为你安装,或者你自己克

服困难安装。如果你只是想在本地计算机上安装测试,在这里可以找到Curt Hibbs的安装手册。本文中我们将使用内置的web服务器WEBrick,

你可以稍后再配置Apache RoR环境。

开始使用RoR

  当你在系统上安装完RoR后,这个过程将变的非常简单。让我们从建立一个基本的应用程序开始。一个书签管理程序怎么样?不过在此我们

仅仅介绍最开始的部分,你并不能得到一个非常完善的书签管理程序。现在抓好你的秒表——让我们纪录下建立这个网站到底需要多少时间!

第一步:建立数据库

  建立一个MySQL的数据库。需要注意的是Rails有一些特别的规则,在数据库中的表名应该采用复数,例如不使用单数的Apple做表名,而使

用Apples;表的关键字应该称为"id",一个非空自增的整形。我想在表中存储Url,名称(name)和书签描述(description)。通过MySQL的命令界

面,我们可以这么建立数据库:

mysql> CREATE DATABASE bookmarker;
然后建立表bookmarkers

mysql> USE DATABASE bookmarker;

mysql> CREATE TABLE bookmarks (

-> id SMALLINT (5) NOT NULL auto_increment,

-> url VARCHAR (255),

-> name VARCHAR (100),

-> description VARCHAR (255),

-> PRIMARY KEY (id));
当然如果你想使用别的方式建立这个表,请别客气。

第二步:建立程序脚手架

  现在开始变魔术了。不管是建立什么样的Rails的应用程序,一旦建立数据库后的第一步总是建立一个空的初始框架。进入合适的空目录,

在命令行里输入魔法命令:

rails Bookmarker
  Rails将会自动建立一个Bookmarker目录,它包含七个子目录。让我们来看一看Rails应用程序的结构。

dir Bookmarker

[.] [..] [app] [components] [config] [db]

[doc] [lib] [log] [public] Rakefile README

[script] [test] [vendor]
  public是程序访问接口。也是唯一一个可以通过web服务器访问到的目录。它包含了浏览器和应用程序交互的中间件dispatch脚本。图片、

CSS和javascript脚本也都应放在public目录中。

  app目录是我们应用程序的核心,包含了一些元素:

dir Bookmarker/app

[.] [..] [controllers] [helpers] [models]

[views]
  在这些目录中controllers包含驱动应用程序的函数,models包含对数据库的描述,views里是.rhtml模板。.rhtml模板将用来控制可见的

HTML结果输出。每个方法都有一个模板。

  log里包含日志,doc将用来存放文档。script里放一些有用的可执行脚本。config存放配置信息。

  config/database.yml是一个YAML文件,它用来告诉Rails连接数据库的信息。现在使用文本编辑器打开database.yml并修改第一部分:

development:

adapter: mysql

database: bookmarker

host: localhost

username: root

password: s3cr3t
  然后我们将使用RoR内置的工具来生成组件

ruby script/generate scaffold Bookmark
  模块是大写的,控制器并不大写,不要问我为什么。

  我们刚才已经建立了一个控制器,一个模型和几个视图。现在我们使用Rails内置的Web服务器来看一看我们将完成的网站。请确定你的防

火墙已经正确设置,允许你访问WEBrick的3000端口。

ruby script/server
  打开浏览器,并输入网址http://youdomain.com:3000/bookmarks(因为bookmarks是控制器的名称),WoW,我们已经完成了一个书签管理器

。仅使用了一行命令就实现了对书签的添加、删除、浏览操作。现在可以停止你的秒表了,纪录一下建立一个网站共需要多少时间。现在你明

白了为什么人们总是说使用Rails建立一个网站是多么容易了?余下的工作就是自定义化,毕竟没有多少人会喜欢Rails所生成的界面(除非你

是个怪人)。

第三步自定义以及其他

  应用程序的所有Ruby方法——添加、删除、修改——都是在app/controllers/bookmarks_controller.rb里定义的,显示都是通过.rhtml模

板来控制的。Rails开发的核心工作就是在这些模块里添加自己的代码,把一个基本显示—编辑-删除功能开发成完整的网站。

  现在让我们为每一个书签添加一个指向它实际网址的链接。先来看一下views/list.rhtml。Ruby的.rhtml模板是使用<%=和<%标签来表示

Ruby代码(熟悉Web开发的人肯定不陌生吧)。<%=是用来在浏览器中输出东西,而<%是用来在后台运行Ruby代码。views/bookmark.rhtml中我

们可以看到:

<%= link_to 'Show', :action => 'show', :id => bookmark %>

<%= link_to 'Edit', :action => 'edit', :id => bookmark %>
  在bookmark数据库表中的每一条数据都会生成上面的代码,并使用Ruby的link_to方法建立一个超链,用来调用显示和编辑。  我们为书

签增加新链接——指向书签页的链接:

<%= link_to 'Open', bookmark["url"] %>
  够简单吧,这就建立了一个指向当前书签Url的链接。

  在结束前,让我们来看一个更加复杂一点例子。因为书签管理器允许用户手动输入URL地址,书签管理器应该检查用户输入地址的合法性,

例如判断地址是否以"http://"开头。

  正如我们所期望的那样,Rails已经提供了相应方法。在models/bookmark.rb中增加一个方法调用:

validatesformatof :url, :with => /^http\:\/\//, :message => "needs to begin with 'http'."
  现在你再尝试建立一个新的书签,当你输入URL提交后,Ruby将使用正则表达式来检查这个URL是否合法,如果URL不是以"http://"开头。

他会在标题显示错误信息。

  今天的时间已经不多了,请继续工作进一步完善你的程序。学习一些Ruby——基本上一学就会。你愿意的话可以增加一个

public/stylesheets/scaffold.css,并为控制器增加一些新的功能,修改数据库的模型,增加Ajax等。

翻译自:Paul Adams的《Getting Your Feet Wet With Ruby on Rails》,有所更改。


类别:Ruby On Rails||添加到搜藏 |分享到i贴吧|浏览(696)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu