Windows下安装Ruby最好选择 RubyInstaller(一键安装包)。
我们这里下载目前较新的rubyinstaller-1.9.3-p0.exe 一键安装包。这个安装包除了包含ruby本身,还有许多有用的扩展(比如gems)和 帮助文档。
双击安装,安装过程出现如下界面。
这里我们选择安装路径为 D:\Ruby。 下面有3个选项分别是:(1) 是否安装tclTk支持。(2) 添加ruby命令路径到系统环境变量PATH。(3)是否将 .rb 和.rbw 文件关联到Ruby。
这里我们全部打勾。点击“Install” 安装完毕。
打开CMD窗口,运行 ruby -v 显示ruby当前版本号。
你也可以输入 ruby -e 'puts "hello world" ',则显示 hello world。
也可以打开记事本写一段代码如: puts "hello world",保存为 test.rb,然后在CMD中 运行 ruby test.rb 则显示结果 hello world。
我想你不甘心就用记事本来写程序吧,这里推荐一款轻巧的代码编辑器SciTE,支持多种语法高亮显示及高亮导出,且免费开源。以前的RubyInstaller 自带SciTE,而新版需要自己下载。官方地址:scintilla.org windows下有绿色版和安装版,安装版下载 点这里。
安装SciTE后,打开它,我们输入代码 puts "hello world" ,点击菜单=>file=>save 保存文件为test.rb。 然后按键盘F5,右侧输出窗口出现结果。
二、下载并安装RubyGems
RubyGems是一个方便而强大的Ruby程序包管理器,类似RedHat的RPM。它将一个Ruby应用程序打包到一个gem里,作为一个安装单元。 特点:能远程安装包,包之间依赖关系的管理,简单可靠的卸载,查询机制,能查询本地和远程服务器的包信息,能保持一个包的不同版本,基于Web的查看接口,能查看你安装的gem的信息。
从官方下载RubyGems,以zip版本为例,解开压缩包,从CMD提示窗口下进入setup.rb所在目录, 运行 ruby setup.rb 即可安装。
较新的Ruby版本已经包含RubyGems了,因此我们不用手动下载安装了。只需在CMD窗口输入指令:gem update --system ,耐心等待一段时间,已有的RubyGems会更新到目前最新的版本。
三、下载并安装Rails
从CMD提示窗口输入指令:gem install rails 开始安装rails。
如不想安装文档文件,可以输入:gem install rails --no-rdoc --no-ri
程序自动下载并安装rails, 耐心等待。
安装完成后,你可以在路径 D:\Ruby\lib\ruby\gems\1.9.1\gems 看到些东西,都是rails的包文件,与ruby安装在同一目录下。
这时在CMD提示窗口输入指令: rails -v 显示rails的版本号。如图:
四、下载并安装DevKit
DevKit 是windows平台下编译和使用本地C/C++扩展包的工具。它就是用来模拟Linux平台下的make, gcc, sh来进行编译。这个方法目前仅支持通过RubyInstaller安装的Ruby。
下载Devkit:http://rubyinstaller.org/downloads
如果上面的地址打不开,就从这里下载:https://github.com/oneclick/rubyinstaller/downloads/
我们这里使用目前较新的版本 DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe
安装步骤:
1) 将下载 DevKit 解压到 D:\DevKit 目录。
2) 打开 CMD 窗口,进入 D:\DevKit 目录,输入ruby dk.rb init 。#生成config.yml,这里会检查将要添加DevKit支持的Ruby列表,只支持通过RubyInstaller安装的Ruby。
3) 输入 ruby dk.rb install #开始安装。
4) 输入 ruby dk.rb review #检查要添加DevKit支持的Ruby列表是否有误,可以略过。
5) 输入 gem install rdiscount --platform=ruby 。#这一步只是验证DevKit是否安装成功,如果能安装rdiscount成功说明安装DevKit成功,也可以不做。
整个过程如图:
五、创建一个Rails项目
打开CMD提示窗口,进入D盘,输入指令:rails new www ,会在D盘创建名称为www 的rails项目结构。
接着进入www目录,输入指令:rails server ,启动rails自带的 webrick 服务器。
打开浏览器输入地址 http://localhost:3000/ 看到欢迎页面,
下来我们让Rails说 "Hello"
Rails是一个MVC框架,Rails接收来自浏览器的请求,对请求进行解读以找到合适的控制器,再调用控制器中合适的方法。然后,控制调用合适的视图,把结果显示给用户。Rails提供了快速创建视图和控制的方法,打开CMD命令窗口。进入到刚才的www项目目录,输入命令:rails generate controller say hello
下面我打开上图中提示的视图文件,路径是 /项目目录/app/views/say/hello.html.erb
修改为如下形式:
复制代码 代码如下:
<h1>Say#hello</h1>
<p>现在时间是:<%=@time%></p>
注意:将视图文件 hello.html.erb 另存为UTF-8编码格式,否则中文会出现乱码。说明一下是UTF-8编码,而不是 UTF-8 +BOM 编码,BOM 是通过文件开头添加几个字符表示文件编码的标准。但是只有微软用了,x-nix 、PHP、Ruby 不认。
接着打开控制器文件,路径是 /项目目录/app/controllers/say_controller.rb
修改为
复制代码 代码如下:
class SayController <ApplicationController
def hello
@time=Time.now
end
end
打开浏览器访问:http://localhost:3000/say/hello。
如果要更改首页,让首页显示Hello。只需2步:
1) 找到 /项目目录/config/route.rb 文件,查找到这行 # root :to =>'welcome#index' 去掉注释并设置为自己的控制器,修改为 :
root :to =>'say#hello'
2) 删除 /项目目录/public/index.html 文件,因为rails优先读取public目录下的静态文件。
再次访问:http://localhost:3000,首页显示Say#Hello,于上图的内容一致。
六 创建一个使用MySQL数据库的Rails项目
1) 打开CMD窗口,进入D盘,输入命令:rails new work --database Mysql,在D盘创建名称为 work 的rails 项目结构。
2) 必须将libmysql.dll库拷贝到 Ruby安装目录的Bin目录下(D:\Ruby\Bin)。否则在启动服务器时候会提示:“没有找到LIBMYSQL.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”
下载地址:http://www.mysql.com/downloads/connector/c/
我们这里下载 mysql-connector-c-noinstall-6.0.2-win32.zip ,解压缩,在lib目录里面的libmysql.dll 就是我们要找的。
3) 修改数据库的配置信息。在 /项目目录/config/database.yml 文件中,分别对应 “开发”、“测试”,“生产” 数据库的配置,把他们修改为自己的配置。
其中development是我们开发中要实际使用的数据库。一定要注意在username: 和 password: 后面至少要保留一个空格。
4) 在CMD窗口输入rake db:craete 命令,会在msyql 中创建由配置信息中所设置的数据库。
5) 我们用scaffold来生成代码,在CMD中输入下面指令:
rails generate scaffold post title:string body:string addTime:datetime
这时候会创建controller, views, models和数据库脚本,但此时还没有创建表。
再输入:rake db:migrate 创建表。完成。
6) 执行命令 rails server
本文从RoR对Ruby的影响、Ruby的优势等多个角度分析了Ruby比Python成功的原因。伴随着RoR的风行,Ruby语言受到越来越多的开发者的关注,同为脚本语言,Python的地位却略显尴尬,什么样的原因,造成了这样的局面?
笔者认为有以下几个方面:
一、 RoR的推波助澜
笔者认为,Ruby的成功,很大一部分是由于RoR的带动。
几年前,如果你没听过RoR倒是情有可原,但如果今天,RoR对你来说,还是一个陌生词汇的话,那你就有点危险了。:)
什么是RoR呢?
全称,Ruby on Rails,简称,RoR或者Rails。
它是个全栈的(full-stack)web应用框架,它为开发者提供了构建一个web应用所需的完整基础结构,并且严格按照MVC(模型-视图-控制器)架构进行开发。
RoR致力于提高开发者的开发效率,希望通过尽量少的代码,完成尽可能多的功能。基于这样的考虑,RoR有两大设计原则,一是,不要重复自己 (Don''t Repeat Yourself);二是,惯例优于配置(Convention Over Configuration)。
使用RoR,你甚至可以通过简单的几条命令行、几行代码,就完成一个功能强大的web应用程序,这极大地提高了开发者的开发效率。
2004年7月,RoR一经发布,在短期内,便受到很多开发者的追捧。时至今日,RoR已经被全世界的开发者们所关注,它带给开发者的效率提升,是前所未有的;它带给业界关于软件开发的思考,也是意义深远的。
在RoR如此风行的大背景下,Ruby on Rails,这个需要使用Ruby进行开发的web框架,也自然地带动了Ruby语言的发展。
在下面的“Ruby语言受关注程度趋势图”上,可以清晰地看出,Ruby语言在RoR发布也就是2004年7月后,进入了高速发展期。
Ruby因为有了RoR这样的“杀手级”应用,变得春风得意,那么Python呢?
在《浅谈Python语言》一文中,我们提到了Python具有丰富的API库,在web开发方面,也有Django、Turbogears这样的一些框架,就运行速度而言,
Python比Ruby快;就社区而言,Python也比Ruby成熟,可是为什么Python没有产生一个像RoR这样的“杀手级”应用呢?
Python语言的创始人Guido在接受InfoQ采访时,是这样解释的:
“我不喜欢Killer
Application,因为那会让多数人或者社区将精力集中于一个地方。Python是一个应用广泛的语言,基于Python已经产生了很多好用的
Web框架,比如Django等。但是Python不Killer
Application,至少目前是这样,而且我相信随着Python社区的发展,会有很多Killer
Applications自然出现。我喜欢多样化的应用。”
通过这个观点,我们可以看出Python在其发展道路上,追求的是一种均衡,一种“大而全”。
“会有很多Killer Applications自然出现”,这点,我想我们需要拭目以待。单就“均衡”而言,笔者认为这很危险,作为一门脚本语言,试图做Java之类传统语言做的事情,不太可取。
以Java为例,在web应用上,有太多的框架可供选择,不错,“在不同的场景用不同的框架”,这想法很好。可是,在实际应用中,有多少开发者可以根据项目特点,正确、合理地选择框架?
与其到最后,用户还不知道该如何选择,还不如一开始就替用户做出一个选择。
作为Python的使用者,我更愿看到有个Python的“杀手级”应用出现,进而带动Python更快速地发展。
你可以说RoR成就了Ruby,可是Rails为什么偏偏选择了Ruby?!Ruby优势何在?
二、 Ruby的优势
1. 比Perl更强大,比Python更面向对象
“比Perl更强大,比Python更面向对象”,这是Ruby创始人Matz设计Ruby的初衷。
Python既支持面向过程的编程也支持面向对象的编程,而Ruby则是完全面向对象。
在Ruby中,任何东西都是对象,包括Python中的基本数据类型;每个过程或函数都是方法。
例如,取-3的绝对值,在Python中,是这样的:abs(-3)。
而在Ruby中,则是这样的:-3.abs。这种OO的方式,显得更加直观。
2. 强大的语法功能
单就语法的简单性而言,Ruby不及Python。但解决一些较复杂的问题,Ruby强大的语法功能,有助于降低问题的复杂度。
例如:
Ruby以“块”的方式来实现列表内的条件、循环语句,比Python的更灵活、更具通用性。
Ruby具有类似Lisp的彻底的函数方式的条件、循环语句等。
Ruby的迭代器功能可以将流程控制结构抽象化。
3. 强大的字符串处理、正则表达式功能
Matz认为:Ruby >(Smalltalk + Perl) / 2。
Ruby类库是对Perl语言功能的面向对象方式的重组,因为借鉴了很多Perl的东西,使得字符串处理、正则表达式这块,Ruby同样强大。
4. 不会僵住的“胶水语言”
同样是“胶水语言”,Ruby比Python更灵活。
使用过一段时间的Python,你会发现,Python比较依赖第三方的东西。相比较,Ruby则更依赖自身。例如,Ruby可以使用(UNIX的)绝大部分的系统调用,单独使用Ruby也可以进行系统编程等。
有优势,Ruby就一定可以成功了?Python同样也有很多优势!对,还得看当时所处的环境。
三、 时势造英雄
这点还得回到RoR的崛起。
Ruby,1995年12月正式发布,2000年进入美国;2004年7月,RoR正式发布。
RoR的出现时间,值得玩味。
在下面的“Java语言受关注程度趋势图”上,可以看到,2004年7月前后,Java处于一个相对“衰退期”。
提到Java,大家应该都会想到J2EE。
J2EE应用程序的广泛实现是从1999、2000年开始的,它的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是因其开发效率、学习难度和实 际性能的问题,在实践中没有获得完全的成功。作为J2EE核心技术的EJB(2.x),更是因其高昂的学习代价、极低的开发效率和极高的资源消耗,备受指 责。
在这样一个大背景下,2003年,Spring框架诞生了。
Spring的设计思想在于“使J2EE开发更加简单”。这个设计思想,在包括Java领域在内的众多软件开发领域引起了广泛关注。软件开发者们开始思考,如何让开发向着一个更简单的方向发展。
RoR在这一时期出现,无疑是顺应了这样一个潮流。
可以这么说,是历史选择了RoR,当然也选择了Ruby。
遇到合适的机遇,还不够,俗话说得好:“众人拾柴火焰高”。
四、 众星捧月
Ruby的出现,受到了两大主流平台Java和.NET的极力追捧。
2006年9月,SUN雇佣了JRuby的主要开发者Charles Nutter和Thomas Enebo;一年不到,2007年6月14号,JRuby 1.0正式发布。SUN在其Java IDE NetBeans 6.0 M10中,更是集成了对Ruby/JRuby的支持。反观Python的Java实现——Jython,则没有这么幸运,发展至今,它并没有得到SUN的 支持。
而Microsoft,也在2007年7月,推出了Ruby的.NET实现——IronRuby的预览版。
相信SUN和Microsoft对Ruby的竞相推崇,必然推动Ruby的进一步发展。
基于以上几点,笔者认为Ruby的成功不是偶然,并且相信这样的成功还会持续下去。对于Python的未来,我们也将拭目以待。