日前,Aptana宣布针对Eclipse发布Aptana Cloud Connect(Aptana云连接)(1.0版)。这是一个基于Eclipse的集成开发环境的免费插件,它可以让Eclipse工程连接到云托管和相关的应用程序生命周期服务。

如果您正在使用Java、PHP或Rails创建Web应用程序,那么这款Aptana Cloud ConnectEclipse插件就可以让您领略其所有优势,包括可扩展性、按需云托管、以及充分的IDE集成。

使用Aptana Cloud Connect(1.0版),您可以:

1.在云托管基础架构之上,快速创建Java、PHP、MySQL和Ruby on Rails服务器。

2.随时测量云中的web和数据库服务器运行状态。

3.部署本地Java(.war)、PHP或Rails工程到远程服务器。

它还包含:

远程数据库工具,用于探测、查询、使用远程数据。

具有面板和邮件通知功能的自动服务器及应用程序监测。

为项目和团队开发提供本地资源库(SVN或Git)。

与远程服务器集成的可选的HTML、CSS、Ajax、JavaScript及其他代码编辑器。

更新网址及下载和安装说明:http://update.aptana.com/install/cloudconnect/
更多详情请见:http://www.aptana.com/cloud (CSDN)

Posted on May 7, 2009 3:52 PM | | Comments (0) | TrackBacks (0)

Aptana RadRails 1.2 is now available. In addition to making it even easier to get your Rails environment set up and configured, for new and expert users alike this release makes deploying and updating your Rails apps to scalable servers via Aptana Cloud Connect as easy as a few clicks. Watch this 4 minute screencast.

What's new in Aptana RadRails 1.2?

Easier to get Rails set up and configured (especially on Windows).
Since setting up Rails can be confusing to new users (and time consuming even for the most experienced), we’ve added a wizard that helps you get standard Ruby installed as well as RubyGems. For Windows users, the wizard will even get and run the Standard Ruby One-Click installer for Windows for you.

Streamlined Rails app deployment and updates via Aptana Cloud Connect.
Pick a Rails project, then choose Deploy to a New Site, Deploy to Staging, or Deploy to Public. Then RadRails and Aptana Cloud Connect do the rest for you. RadRails 1.2 automates setting up all the integration points, installs the necessary gems, and executes the proper deployment commands for you. And as always shows you in the console all the commands so that you can do them manually or use them in your scripts. Checkout the screencast to see for yourself:

Preparing for Eclipse 3.4 compatibility.
The release also lays some plumbing that will be useful as we move towards using Eclipse 3.4 as the platform for future releases. This primarily means that some debugging functionality that only worked in Studio 1.2 (based on Eclipse 3.2) will now work in Eclipse 3.3+ and in the next major release of Studio when that comes out.

Download - http://www.aptana.com/studio/download

Posted on April 13, 2009 3:15 PM | | Comments (0) | TrackBacks (0)

Rails 2.2 的正式版已经发布,主要包含以下几个新的特性:

1。Internationalization by default 自动国际化
2。Stronger etag and last-modified support 更强的etag和最后更新支持
3。Thread safety and a connection pool 线程安全和连接池 (这可是2.2的重大改进,多了个连接池,貌似更好用了)
4。同时兼容Ruby 1.9 和 JRuby  (1.9的ruby速度上去了,不知道诟病的gc怎么样了,唉。。。ruby造就了rails,也限制了rails )
5。Better API docs, great guides 更好的API文档和教程  (看来,很多人帮忙做了这些工作 )

升级方法:

gen update --system
gem install rails


详细的版本发布信息请看 这里。 (开源中国社区)

Posted on November 26, 2008 11:50 AM | | Comments (0) | TrackBacks (0)

最近,到处可以看到大量的文章:Java将会消失取而代之的是脚本语言或其他汇编语言。不,那种情况是不会发生的。下面是我的论据,我们先看些数据。

2008年5月的编程语言受欢迎度情况:虽然有些人并不喜欢Tiobe的基于搜索引擎的编程语言欢迎度调查,但是我认为还是有根据、公平的。

从图中的数据发现和“C语法”相似语言占有较大的份额。
C (15.292) + C++ (10.484) + Java (20.176) + C# (3.963) = 49.915%
表明这四种语言占据了近一半的市场。如果我们在这里添加PHP ( 10.637% )(在某种程度上采用了类似的语法)结果是60.552%。

TIOBE Index Top 20 

 

因此,我们得到如下结论:
理由1 :语法是非常重要,因为它是建立在以往的知识的基础上。类似的语法具有相近的概念。程序员不需要费很多时间和精力学习新语法。
 
让我们看看一组挑战语言:
Python (4.613) + Ruby (2.851) + Lisp/Scheme (0.449) + Lua (0.393) + SmallTalk (0.138) +
Haskell (0.137) + Groovy (0.131) + Erlang (0.110) + Caml (0.090) + Scala (0.073) = 8.985%
上面10种语言的总比例比VisualBasic(10.782%)的还少。

原因2 :大的难点是分心。程序员要学习这10种语言并且达到可以评价的水平需要付出很大的努力。况且,大部分的语言具有不同的语法和引入了不同的(有时是根本不同的)概念。

最近7年来的趋势,我们可以看到大多数的语言流行起来。也有几个例外,如下降的Perl ,但没有真的是消失。有周期性的浮动,但在长远看来,没有什么改变。
 
这表明,虽然各种语言在短的时间内会使程序员着迷,但它们被放回到“架子”上也相当快速。这些语言失去了现实中开发项目的机会。 
 

TIOBE Trend

原因3 :缺乏让程序员转换的动力。市场是相当稳定,现有的语言工作的相当好,管理者也没有强制程序员学习新语言。
 
理由4 :挑战语言似乎并没有抓住时机,创造一个应用于项目中的机会。
或许跟它们发展和普及慢有关。
理由5 :挑战语言社区没有做好吸引程序员的工作。
 
让我们看看现在就业市场发生了什么事。indeed.com提供的是我使用的工具和我比较了很多语言制作了下面的表格。


Java, C, C++, C#, Python, Ruby, PHP, Scala Job Trends graph

理由6 :短期内没有很大的诱因让程序员切换到挑战语言中,获得技能但不太可能转化为收入。

那么,我研究所有这些统计数字得到某些结论,但语言本身需要什么特性和外部条件如何将会受欢迎?
 
原因7 :新的语言没有对程序员的生活和项目有非常大的推进作用。
 
理由8 :没有竞争力的应用平台。


理由9 :所有这些新的语言没有强大的赞助商和金钱在市场上推动他们。所有这些新语言诞生于大学和研究机构,或来自非常特殊的区域。
 
理由10 :大部分的这些语言左右徘徊,没有果断地登上“语言”大舞台。
 

出于好奇心,这里是一个名单,谈到一些语言与他们的发布日期:

Ruby (mid 1990s), Python (1991), Lisp (1958), Scheme (1970s), Lua (1993), Smalltalk (1969-1980), Haskell (1990), Erlang (1987), Caml (1985), OCaml (1996), Groovy (2003), Scala (2003)

和成功的语言相比:

C (1972), C++ (1983), Java (1995), C# (2001), BASIC (1964), Pascal (1970), FORTRAN (1957), Ada (1983), COBOL (1959)

很明显,大部分这些“新”语言错过了成功的“列车”。
 
理由11 :“特色”是大项目的灾难。
目前的大项目不曾使用过新语言,很难没有些偏见的评价。偏见正是新语言生长的真正障碍。
 
理由12 :非自然的概念(对大多数程序员而言)提高了入门的门槛。
函数式编程使你的编码象在解数学方程。但有多少人热爱数学并能用它来编程呢?面向对象语言提供一个很大的优势:他们让程序员认为有想要的模式,而不是语言或机器。
 
理由13 :没有先进的工具,面对大量的代码行缺乏重构程序员和开发团队的能力。
 
Java的危险并是不来自外部。这些新的(其实他们大多是相当老)的语言没有可能取代Java的。Java的危险来自于它具有太多的“功能”,如果想保留其他语言的一些概念和C++的垃圾回收功能需要进行转化。 (csdn)

Posted on May 31, 2008 11:24 AM | | Comments (0) | TrackBacks (0)

拥有数百万开发者的Java无疑是一个非常成熟的语言,而Ruby则有望成为成长最快速的编程语言,据专家分析在未来五年中使用Ruby的开发者数量将会翻两番。

在Sun公司CommunityOne开发者大会的一个专题讨论会上,国际著名分析机构Gartner的分析师Mark Driver表示,“现在专业Ruby开发者的数量不超过一百万,不过据我们估计到2013年这个数量将达到四百万。”Driver还对媒体表示, Gartner的调查发现,不仅仅是编程爱好者对Ruby非常感兴趣,对Ruby感兴趣的商业开发者的比重也将大幅增加。“Ruby对商业应用开发者来说将显得更加重要,”Driver如此表示。

这次专题讨论会聚集了来自不同领域的很多参与者,其中包括JRuby项目的某些核心开发者和众多Ruby开发者。除此之外,在讨论Ruby成长问题的同时,与会者还将Ruby与其它语言进行了对比,例如PHP和Java本身。而JRuby是一个运行在Java虚拟机JVM上的Ruby实现。

Sun工程师Charles Nutter是JRuby项目的核心开发者之一,他表示开发者开始关注Ruby的原因之一是“Ruby是当前最时髦的语言之一,实际上有很多方法来解决Web编程问题。”

Nutter还介绍了Sun公司在JRuby项目上的进展。“在兼容性方面我们已经基本没有问题,接下来要进行的一个重大任务是提高性能。”对于Ruby 和其它动态语言,开发者存在的一个最大的抱怨之一是其性能问题,它们要比诸如Java和C++等静态类型的语言慢的多。“我们已经让Rails[Ruby on Rails]可以更好的运行在JVM上,现在重点是使其更好的与Java类库融合在一起,从而使JRuby更加适合整个平台。”

Happy Camper Studios是美国菲尼克斯一家专注于开发基于JRuby的图形化界面应用程序和培训应用程序的开发公司,该公司的总裁David Koontz表示,开发者尤其是Ruby开发者应该牢记的一件事情是:“提到Java的时候应该有两种意思:Java编程语言和Java平台。我们喜欢 Java平台,而我们喜欢在这个平台上使用Ruby编程语言。”

来自旧金山的独立开发者Sara Mei曾使用Ruby语言编写了大量应用,他表示,“Ruby的魅力在于它是一个使用起来非常舒服的编程语言,它具有许多强大的元编程(meta-programming)功能。”

Koontz表示,使用JRuby使得他的公司可以更方便简单的使用Swing。Swing是Java用户界面应用程序编程接口API和部件工具集。 Happy Camper Studio的Monkeybar代码库可以让开发者从JRuby中使用Swing。这意味着Java开发者可以按照他们习惯的方式来使用这个图形化用户界面编辑工具,而且可以更容易的以纯Ruby语言的方式来编写他们的应用程序逻辑。

但是为什么选择Ruby而不是其它像PHP之类的语言呢?

Mei表示,“我自认在生产应用的开发方面我曾经进行了大量的Web脚本编程,很多语言都需要一个学习的过程。而且我也曾从事了一些大型的应用程序开发。不过我最后发现,编写同样的应用程序,使用Ruby语言所需要的开发者的数量要比其它语言少一半。”

Driver将PHP成为行业语言的一个典型,并表示PHP非常容易掌握,不过同时他也提到PHP更像是一个专用语言,而Ruby则是一个多面手。

当被问及他们最喜爱的Ruby集成开发工具是什么的时候,Nutter和他Sun公司的同事及JRuby项目的伙伴Thomas Enebo表示,他们更喜欢Sun公司的NetBeans。Koontz则表示他喜欢Mac OS X的TextMate。甲骨文的Ruby开发者和产品战略主管Rich Manalang表示他更喜欢Vim;Mei表示她更喜欢使用jEdit。不过Driver表示,他认为NetBeans是一个非常好的Ruby开发工具,同样不错的还有CodeGear的3rdRail。

同时Mei表示,尽管在很多Ruby开发者中存在一种反微软的情绪,我们还是可以看到与以前相比,现在有更多的人开始在Windows上使用Ruby进行开发。当然在Mac和其它平台上也进行了大量的Ruby开发。

Driver表示,他认为对于Ruby来说如果要想真正流行,需要更多来自大厂商的合作赞助。

Manalang对此表示同意,但是他同时表示“在甲骨文Ruby正在逐渐引起关注。我们正在试图发现如何让开发者具有更高的开发效率,以及如何给予他们更多的选择。我们公司有很多人在关注着Ruby语言。”

Nutter对此补充说:“Ruby是技术被采用的一种经典模式,它不是一个大公司来告诉人们要去使用什么技术的方式。现在使用Ruby的人电脑爱好者——这是一种更健康的系统。”

但是,Koontz表示,Ruby更像是一门应用语言,而Java现在已经被看作一个高级系统语言;Java更接近于硬件。有意思的是在10年前Java处于起步阶段的时候。C++被认为是是接近于硬件的系统语言,而Java则被认为是应用语言。

同时与Java或其它更成熟的语言相比,Ruby语言的另一个劣势是它没有正式的管理人员或标准组织来支持它。Java有Java标准制定组织JCP来支持它,现在JCP就正在进行改革来减少Java规范中比较陈旧和冗余的部分。

不过,Nutter指出有两个项目对Ruby的成长起到了非常积极的作用。其中一个是Rubinius项目,它为Ruby创建了一套测试规范来定义今天的 Ruby内容。Rubinius是一个为Ruby编程语言创建下一代虚拟机的项目。另一个Nutter认为不错的现象是所有不同的Ruby实现正在通过互联网逐渐汇聚起来,相互交流Ruby的未来发展方向。

Enebo专注于Ruby的杀手级应用的扩展问题:Ruby on Rails。他表示,“Ruby on Rails开始于2004年,已经经历了彻底的修改,并且还会继续变化。”他提到他不认为扩展性会成为Rails的一个问题。

通过这次专题讨论会,专家们一致认为,对于Ruby来说最困难的事情包括教育开发者以Ruby的方式来思考问题。Koontz表示,“教育人们以Ruby开发者的方式来思考,而不是以Java开发者方式思考是一件困难的事情。”

同时,在一场关于Python和Jython(Sun公司运行在Java虚拟机上的Python实现)的讨论会上,Jython项目的Sun工程师Ted Leung表示,Sun公司已经使得Jython可以与Python 2.5兼容,并且实现了一种固有的C语言实现。Leung表示他预计今年底Sun公司将具有一个支持Python的NetBeans插件。

Leung的Jython同事Frank Wierzbicki表示,他相信Python和Ruby实际上有很多共同之处。但是,“Ruby有些更专注于使程序可以更快被编写,而Python则有些更专注于让程序更容易被阅读。” (IT168 东方蜘蛛)

Posted on May 28, 2008 1:41 PM | | Comments (0) | TrackBacks (0)

创建Rails项目的时候,IDE会让你选择要用原生Ruby还是JRuby,选择要用哪个数据库驱动(如果是JRuby还包括JDBC),还乐意 很方便地升级到最新版的Rails。确认新建项目对话框之后,项目的默认目录结构就会建好。这是Rails的一大优点,由于所有的应用结构都差不多,所以 你拿到别人建立的项目也会很快上手。NetBeans的项目浏览器能让你对项目文件之间的整体逻辑有个直观的感受,你也可以方便地浏览它们。

你可以直接在IDE里面使用Rails生成器——在项目上点右键就可以选择使用哪个生成器,填好参数,运行,接着你就会在输出窗口看到生成器的输出了。

你在开发的时候还可以用上编辑器的代码完成、重构、快速修补等等功能(本系列的第一部分介绍了编辑器的部分特性)。要是准备好运行你的程序了,什么配置都不用做,直接按下运行按钮就可以了——NetBeans捆绑了Webrick服务器来运行你的应用。浏览器窗口会自动打开。如果你打算调试程序,IDE还会在调试模式运行Webrick服务器。当然,你也可以很容易地把服务器换成Mongrel。

IDE还集成了Rake,因此你可以在项目中执行Rake目标:

调试Rake目标也很容易,运行迁移脚本,与Rails控制台交互,这些都可以在IDE里完成。你还可以通过一个特殊的对话框安装各种Rails插件。还有很多其他Rails开发方面的特性,希望我举的这些例子能让你对在NetBeans中开发Rails应用有个初步的印象。

编辑特性

我在上一部分已经介绍过一些编辑方面的特性(代码完成和重构)。我认为NetBeans的编辑器应该是大多数Ruby开发者都会喜欢的——随时都会 发现一些贴心的小功能。例如当你创建一个新方法的时候,编辑器会自动插入结束语句,并把光标定位到方法中间那一行。你还可以看到各种元素,比如变量在文件 中出现的所有位置:

如果我想给一个变量改名,只需要按一下Ctrl-R,文件中所有用到该变量的地方都会一下子改好:

漂亮的语法着色方便了在代码中定位,甚至RubyDocs也有语法着色。你一边输入,编辑器就会一边把错误用下划线标出来,NetBeans还会告诉你哪些变量是没用到的,好让你删掉它们。

如果你按着CTRL键,同时把鼠标移到任何类、方法或者变量上面,编辑器会把你带到它们的声明。你还可以看到一个小提示,告诉你当前选中元素的用途。

你也可以使用代码模板。你可以在很多预定义的模板里面选择,自己创建新模板也很容易。在模板里面可以设置模板展开后光标的位置,还可以预先插入各种变量。因此要是你经常使用某些API,模板就很有帮助。

还有很多编辑特性不能一一介绍,请查阅关于Ruby编辑的Wiki页面:http://wiki.netbeans.org/wiki/view/RubyEditing

Gem管理器

Gem管理器(Tools | Ruby Gems)可以安装新版本的地Gem,浏览、升级已经安装的Gem等等,请看下面的截图。用户界面和NetBeans插件管理器以及Rails插件管理器 都很相似,因此你并不会感到陌生。在Ruby仓库里有很多很多Gem,想找什么库的时候全文搜索一下会很有帮助。

Ruby选项

我前面提过,你可以在原生Ruby或者JRuby之间切换。IDE默认使用JRuby,因为它捆绑了JRuby,不过只要告诉IDE现有Ruby的安装位置,它就会改用你指定的Ruby,不管是什么操作系统。

选项对话框里面还可以选择是使用经典调试器,还是使用快速调试器。不过在JRuby环境下你只能用经典调试器,虽然慢一点,但能适应各种情况。在原 生Ruby环境下可以使用快速调试器(很容易安装,IDE会去下载它),这是Ruby推荐使用的调试器。选项对话框还有两个选项页:“格式化”控制编辑器 里的格式化设置,“提示”控制编辑器里那些“小灯泡”的出现。

单元测试

单元测式功能集成得很出色。例如当你创建一个新模型的时候,一个新的单元测时也会自动创建好。这是Ruby on Rails的一个特色,它的哲学是单元测试太重要了,绝对不可缺少。单元测试也可以直接在编辑器里运行,编辑器里当然还可以浏览测试类。

如果你真的很在意测试,可以安装“ZenTest”Ruby Gem(通过Tools | Ruby Gems),之后项目的右键菜单就会多一个“AutoTest”选项。它会启动项目的自动测试,每当你修改了一个文件,它都会自动执行单元测试。 AutoTest在很多情况下都能判断出需要运行哪些单元测试——尤其是Rails项目。如果它判断不了,就会运行所有单元测试。

使用控制台

尽管我们已经尽可能把功能集成进IDE,还是有你想用控制台的时候。比如当你想通过交互的方式尝试一些Ruby API的时候,控制台就很有用。选择Window | Other | Ruby Shell (IRB)就会打开Ruby Shell。控制台会在IDE的底部打开,你可以不受拘束地享受Ruby交互语言的强大能力。

更多信息

关于NetBeans的Ruby支持,你可以在它对应的Wiki页面上找到更多信息:http://wiki.netbeans.info/wiki/view/Ruby

Ruby文档页面上有不少演示和教程:http://www.netbeans.org/kb/60/ruby/index.html

最后,你可从以下地址免费下载NetBeans IDE:http://www.netbeans.org/community/releases/60/index.html。你还可以选择安装只包含Ruby的精简版IDE(特别提供了安装包),或者安装完整版的Java IDE附带Ruby支持。只包含Java的版本也可以通过Tools | Plugins增加Ruby支持。

在下一篇中,我们将讨论安装若干实验性插件之后得到的额外功能,还会讨论一些与社区相关的论题,比如如何参与到这个项目以及未来的计划。与此同时,请务必试一下NetBeans的Ruby支持。如果你经常用搞Ruby开发,NetBeans就是你要找的IDE!(Roman Strobl 译者 郭晓刚)

查看英文原文:NetBeans: Ruby Developer's New Best Friend (Part 2)
Posted on December 31, 2007 10:17 AM | | Comments (0) | TrackBacks (0)

万众瞩目的Ruby on Rails 2.0已经发布了,Rails框架在2004年诞生以来,一直保持着相当快的版本升级速度:2005年发布了Rails1.0版本,2006年初发布 Rails1.1版本,2007年初发布Rails1.2版本,而还没有等到2008年,在2007年圣诞前夕的12月6日,Rails2.0已经发布。

Rails框架每个大的版本升级都给我们带来了相当多的新功能,新惊喜。Rails1.0带给我们完善的单元测试和集成测试;Rails1.1带给我们DataBase Migration和RJS;Rails1.2让我们看到了REST的光明前景,那么Rails2.0又将带给我们什么呢?我粗略的翻译了一下Rails框架作者DHH写的Rails2.0框架介绍文章,以下翻译自DHH的文章,原文在:

http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-done

在经过差不多一年的开发之后,Rails2.0终于发布了。这是一个棒极了的Rails版本,包括了大量堪称伟大的新特性,无数的bugfix和大量功能的打磨。我们花了无数的精力去打造这样一个非常完美合理的软件包。

这也是Rails框架发展历史上的一个里程碑。我个人在Rails框架上面的开发工作已经有四年半的时间了,并且我们现在的贡献者也越来越多。我对这几年我们所做出的工作和我们一直坚持的信念感到非常的满意。我们一直在坚持这一点并且不断推动它。

在详细的介绍Rails2.0之前,我要向那些为Rails框架做出过贡献的每一个人致以深深的谢意,不论是像一个家庭那样其乐融融的Rails核心开发团队,还是成千上万的、而且年复一年为Rails提交补丁,积极参与Rails社区人们。Rails2.0也是大规模开源软件开发社区的一个重大胜利,而你完全可以自豪于你在Rails社区当中扮演的角色和做出的贡献。干杯!

现在让我们简单的窥一斑见全豹的看看Rails的那些闪闪发光的特性:

Action Pack: Resources

Controller里面充斥着大量action方法的时代已经过去了,我们对REST架构的应用进行了大量的改进和提高。首先,我们不再使用分号来隔离自定义的方法,而是采用斜线,例如原来是 /people/1;edit的URL,现在改成了 /people/1/edit.另外我们还对URL路由资源添加了命名空间的支持,因此像后台管理的接口你可以像这样非常简单的定义:

 
ruby 代码

   1. map.namespace(:admin) do |admin|  
   2.   admin.resources :products,  
   3.     :collection => { :inventory => :get },  
   4.     :member     => { :duplicate => :post },  
   5.     :has_many   => [ :tags, :images, :variants ]  
   6. end 

 

这种方式可以让你按照如下的方式定义命名路由,例如:inventory_admin_products_url和 admin_product_tags_url等等。为了方便的记录所有的路由规则,我们添加了一个rake任务叫做“rake routes”,它能够列举出来routes.rb定义的所有命名路由规则。

此外我们还引入了一个新的约定,即所有基于资源的controller默认都是复数形式的。这样即便单个资源在不同的路由规则中被多次引用,仍然可以指向同一个controller来处理,例如:

 
ruby 代码

   1. # /avatars/45 => AvatarsController#show  
   2. map.resources :avatars 
   3.  
   4. # /people/5/avatar => AvatarsController#show   
   5. map.resources :people, :has_one => :avatar 

 

Action Pack: Multiview

与资源映射一起进行功能增强的还有MultiView。我们已经有了respond_to方法,但我们可以更进一步,把MultiView控制延伸到模板里面去。我们现在可以根据模板文件的后缀格式来决定使用什么render机制。因此,show.rhtml你可以写成 show.rhtml.erb,这就表明是一个默认的rhtml模板,和你过去在Action里面使用respond_to声明的format.html 是一个意思。此外你还可以使用诸如show.csv.erb,它表明显示为csv格式的数据,并且使用默认的erb去render它。

所以,新的模板格式是: action.format.renderer。例如:
* show.erb: 不管什么格式的显示方式都使用默认的erb显示show模板
* index.atom.builder: 用Builder库来render XML文件,输出的文件类型为RSS的AOTM类型
* edit.iphone.haml: 使用用户自己定义的HAML render机制来输出模板内容到iPhone手机上面

说到iPhone手机,我们可以自己造一个专用的类型来实现内部路由。当你需要类似iPhone这样的特殊的HTML接口的时候,我们所要做的就是:

 
ruby 代码

   1. # should go in config/initializers/mime_types.rb  
   2. Mime.register_alias "text/html", :iphone 
   3.  
   4. class ApplicationController < ActionController::Base  
   5.   before_filter :adjust_format_for_iphone 
   6.  
   7.   private  
   8.     def adjust_format_for_iphone  
   9.       if request.env["HTTP_USER_AGENT"] && request.env["HTTP_USER_AGENT"][/(iPhone|iPod)/]  
  10.         request.format = :iphone 
  11.       end 
  12.     end 
  13. end 
  14.  
  15. class PostsController < ApplicationController  
  16.   def index  
  17.     respond_to do |format|  
  18.       format.html   # renders index.html.erb  
  19.       format.iphone # renders index.iphone.erb  
  20.     end 
  21.   end 
  22. end 

 

你完全可以在config/initializers/mime_types.rb里面注册自己的mime type类型的映射,这个文件默认已经提供了。

Action Pack: Record identification

为了驱使你使用基于资源的映射,我们对资源映射的controller和view的URL处理进行了大量的简化。我们添加了大量的命名约定,让你可以直接把model对象转化为资源映射的路由,例如:

 
ruby 代码

   1. # person is a Person object, which by convention will   
   2. # be mapped to person_url for lookup  
   3. redirect_to(person)  
   4. link_to(person.name, person)  
   5. form_for(person) 

 

Action Pack: HTTP Loving

如你所期望的那样,Rails2.0的Action Pack更加贴近HTTP,并且充分利用HTTP协议,例如资源、多种视图,还有更多的呢。我们添加了一个模块来处理HTTP的Basic验证,它能够让授权的API轻松跨越SSL协议,而且他是如此的简单易用。下面是一个例子(更多的例子请参考ActionController:: HttpAuthentication):

 
ruby 代码

   1. class PostsController < ApplicationController  
   2.   USER_NAME, PASSWORD = "dhh", "secret"   
   3.  
   4.   before_filter :authenticate, :except => [ :index ]  
   5.  
   6.   def index  
   7.     render :text => "Everyone can see me!"   
   8.   end 
   9.  
  10.   def edit  
  11.     render :text => "I'm only accessible if you know the password"   
  12.   end 
  13.  
  14.   private  
  15.     def authenticate  
  16.       authenticate_or_request_with_http_basic do |user_name, password|   
  17.         user_name == USER_NAME && password == PASSWORD  
  18.       end 
  19.     end 
  20. end 

 

此外,我们也做了很多工作让你把JavaScript和CSS文件组织到一个逻辑单元里面去,而不需要让浏览器发起多次HTTP请求,分别获取每个 JavaScript和CSS文件,以便减少HTTP请求次数。使用javascript_include_tag(:all, :cache => true) 这个helper在生产环境下自动把public/javascripts/目录下面的所有js文件打包到单个 public/javascripts/all.js文件里面,但在开发环境下,仍然保持每个文件独立的修改。

我们还添加了一些选项让,仅仅几行代码,就能够让浏览器去访问多台服务器上面的资源。如果你添加如下设置:ActionController::Base.asset_host = “assets%d.example.com”,那么Rails框架就会自动的把静态资源的请求分发到多台物理服务器上面去,例如分发到 assets1.example, assets2.example.com, assets3.example.com等等。这样浏览器可以同时向多台服务器下载资源,增加你的应用的访问速度。

Action Pack: Security

能够很简单的创建出来安全的应用总是一件令人愉快的事情,而Rails2.0提供了大量先进的功能来达到这一点。非常重要的是我们现在提供了一种内建的机制来处理CRSF攻击。我们在所有的HTML表单和AJAX请求当中包含了一个特殊的token,而请求来自于其他的应用的时候,你就可以检测到。所有的这些选项在新创建的Rails2.0项目当中默认就是打开的状态,对于你升级到Rails2.0的项目要打开这一个选项也很容易,使用 ActionController::Base.protect_from_forgery就可以了,详细的说明请看: ActionController::RequestForgeryProtection。

对于允许用户在应用当中提交HTML代码的情况,防止XSS攻击现在也变得更加简单了。TextHelper#sanitize方法从过滤黑名单变成了验证白名单。如果你已经使用了sanitize方法,你就会自动获得更好的保护。当然你也可以自行调整默认允许的HTML tag,请看TextHelper#sanitize获取详情。

最后,我们还添加了“HTTP only cookies”支持,这一特性并不是所有的浏览器都支持,但是对于支持的浏览器你就可以派上用场了。

Action Pack: Exception handling

大多数常见的异常都可以统一处理,而不是每个需要单独的处理。通常情况下,你只需要覆盖rescue_action_in_public方法,来进行统一的异常处理即可。但是你也有可能需要使用自己的case语句来处理特定场合的异常。因此我们现在提供了一个类级别的宏叫做rescue_from,你可以使用它来声明针对某个特定的Action来捕获异常,例如:

 
ruby 代码

   1. class PostsController < ApplicationController  
   2.   rescue_from User::NotAuthorized, :with => :deny_access 
   3.  
   4.   protected  
   5.     def deny_access  
   6.       ...  
   7.     end 
   8. end 

 

Action Pack: Cookie store sessions

Rails2.0默认的Session存储机制现在是基于Cookie的方案。Session也可以不必存储在服务器的文件系统或者数据库系统里面,而是以ruby hash的格式每次作为cookie发送到客户端浏览器来保持。这样做不单单会比传统的服务器端保存Session的方式要快一些,而且完全不需要维护。你不需要在服务器上面运行cron job任务来清理session文件,也不必担心因为你忘记清理session文件导致你的服务器/tmp分区下面因为塞满了50万的session文件,从而让你的服务器crash掉。

如果你能够遵循一些最佳实践,保持session最小化,例如只在session里面存放user_id和flash信息,那么这种session 机制就会很棒。但是,如果你打算在session里面保存核弹发射代码的话,这一存储机制就不是一个好主意了。因为它们无法被加密(例如用户伪造 is_admin=true),它们很容易被用户看到。如果对于你的应用程序来说,这是一个必须注意的问题,那么你就应该使用传统的session存储机制(但你首先应该先做一下调查)。

Action Pack: New request profiler

在一个真实的应用当中找出性能瓶颈是一个艰难的活,但有了我们新的request profiler,工作会变得简单很多。request profiler跟踪一个完整的执行脚本,报告执行结果,你可以像这样来使用它:

 
ruby 代码

   1. $ cat login_session.rb  
   2. get_with_redirect '/'  
   3. say "GET / => #{path}"   
   4. post_with_redirect '/sessions', :username => 'john', :password => 'doe'  
   5. say "POST /sessions => #{path}"   
   6. $ ./script/performance/request -n 10 login_session.rb 

 

这样你就可以得到一份非常详尽的HTML和text格式的运行报告,每个步骤执行了多少时间,有了这个东西,你就可以很清楚的知道怎样优化你的应用程序了。

Action Pack: Miscellaneous

还有一个值得一提的是AtomFeedHelper。它可以让你更容易的使用增强的builder格式来创建RSS输出,例如:

 
ruby 代码

   1. # index.atom.builder:  
   2. atom_feed do |feed|  
   3.   feed.title("My great blog!")  
   4.   feed.updated((@posts.first.created_at))  
   5.  
   6.   for post in @posts 
   7.     feed.entry(post) do |entry|  
   8.       entry.title(post.title)  
   9.       entry.content(post.body, :type => 'html')  
  10.  
  11.       entry.author do |author|  
  12.         author.name("DHH")  
  13.       end 
  14.     end 
  15.   end 
  16. end 

 

在Rails2.0里面,我们已经进行了大量的性能优化,因此对于helper的调用开销已经变得很小了,而且对于简单的命名路由,我们还使用了cache,让它们能够执行的更快。

最后我们把in_place_editor和autocomplete_for这两个helper从Rails框架当中挪出去,放到了Rails官方SVN的插件目录下面了。

Active Record: Performance

ActiveRecord进行了无数的bug修复和少量的调整,但是仍然有一些值得一提的亮点。我们添加了一个非常简单的查询缓存,它能够在同一个请求的过程当中记录相似的SQL调用,并且缓存查询结果。查询缓存对于那些很难用:include来解决的N+1次查询问题会非常有帮助。另外我们也彻底提高了fixtures的性能,对于大多数常规的测试套件,性能提高了50-100%。

Active Record: Sexy migrations

现在我们有一种新的migration文件中声明的格式。以前我们是这样写的:

 
ruby 代码

   1. create_table :people do |t|  
   2.   t.column, "account_id",  :integer 
   3.   t.column, "first_name",  :string, :null => false 
   4.   t.column, "last_name",   :string, :null => false 
   5.   t.column, "description", :text 
   6.   t.column, "created_at",  :datetime 
   7.   t.column, "updated_at",  :datetime 
   8. end 

 

而现在,我们可以这样写:

 
ruby 代码

   1. create_table :people do |t|  
   2.   t.integer :account_id 
   3.   t.string  :first_name, :last_name, :null => false 
   4.   t.text    :description 
   5.   t.timestamps  
   6. end 

 

Active Record: Foxy fixtures

近来fixtures功能受到了很多抨击,对于fixtures的批评主要集中在fixtures之间声明的依赖关系上。在fixtures里面通过声明id属性来作为主键,从而构造fixtures之间的关联关系是个郁闷的活。现在你可以通过这种方式声明和编写fixtures:

 
ruby 代码

   1. # sellers.yml  
   2. shopify:  
   3.   name: Shopify  
   4.  
   5. # products.yml  
   6. pimp_cup:  
   7.   seller: shopify  
   8.   name: Pimp cup  

 

如上面所示,不再需要定义id属性,通过id来关联fixtures了,你现在可以直接使用fixtures的名字来建立关联关系。

Active Record: XML in, JSON out

ActiveRecord支持XML的序列化已经有一段时间了。在Rails2.0当中,我们还添加了XML的反序列化功能,所以你现在可以这样用 Person.new.from_xml(“David“) 来获取person对象。当然我们也添加了序列化到JSON格式的功能,它和XML序列化的支持是一样的,还可以支持关联关系的抓取,只需要写 person.to_json就可以了。

Active Record: Shedding some weight

为了让ActiveRecord更加简洁和通用,我们把acts_as_list,acts_as_tree等acts_as_xxx功能挪出了 Rails,放在了Rails官方的SVN插件里面。如果你需要用到诸如acts_as_list的话,那么你需要安装这个插件,你可以. /script/plugin install acts_as_list 来安装,安装好以后,acts_as_list功能又回来了,用法没有任何区别。

更加激进一点的改动是我们把所有的商业数据库驱动全部挪到了外部的gem包里面。因此Rails2.0仅仅自带MySQL、SQLite和 PostgreSQL数据库驱动。这三个数据库是我们更加积极测试和支持的数据库。当然,这并非意味着我们排斥商业数据库,我们只是希望它们能够在 Rails发行版本之外保持自己独立的开发和发布计划。对于商业数据库来说,这其实是一件好事情,让厂商可以在基础版本上面添加更多的异常和处理机制,使它们工作的更好。

所有的商业数据库驱动现在都放在gems包里面,符合如下命名规则:activerecord-XYZ-adapter。所以如果你安装了 activerecord-oracle-adapter包,那么这台机器上面所有的各种版本的Rails应用程序都可以访问Oracle数据库了,你却无需修改任何一行应用的代码。

这种方式对于新的数据库驱动来说在Rails社区也可以更加方便的获得支持。只要你把数据库驱动安装命名规范打包成为gem,用户就可以安装这个gem,立刻在Rails程序当中使用到它们了。

Active Record: with_scope with a dash of syntactic vinegar

ActiveRecord::Base.with_scope被劝阻使用以避免用户在controoler,特别是filter里面误用。现在我们鼓励用户仅仅在model里面使用这种格式,这也是当初我们设计这项功能的初衷和保持一个良好实践的需要。当然,这仅仅只是鼓励和劝阻,如果你在衡量得失之后,非要坚持在model之外使用with_scope的话,你尽管可以用这种方式来调用:.send(:with_scope)。

ActionWebService out, ActiveResource in

在SOAP和REST的争论当中,Rails选择坚定的站在REST这一边似乎不出人意料。如果你并没有集成其他异构系统需求的话,那么我们强烈劝阻你使用SOAP。作为很自然的选择,ActionWebService现在并不在Rails框架的依赖当中,gem包仍然保留,但是这是一个重要的信息,建议你尽量不用它。

与此同时,我们把新的ActiveResource包从beta版本升级挪入Rails框架之内。ActiveResource很像 ActiveRecord,只不过面向的不是model,而是资源。它有和ActiveRecord非常相似的API,并且可以和基于资源的Rails应用良好的整合。例如,ActiveResource提供了一个vanilla scaffold,你可以参考。

ActiveSupport

ActiveSupport没有多少新东西,我们只是添加了大量新的方法,例如Array#rand可以随机取得集合的元素, Hash#except可以过滤掉不想要的key和其他大量的Date类型的扩展。另外单元测试增加了一个assert_difference的便利方法。简而言之,仅仅是bugfix和调整。

Action Mailer

Action Mailer有不少更新,除了一大堆bugfix之外,我们添加了一个选项可以注册可选的模板渲染机制,此外还给email的单元测试添加一套assert_emails,例如验证邮件投递的数量:
ruby 代码

   1. assert_emails 1 do post :signup, :name => ‘Jonathan’ end 

 

Rails: The debugger is back

为了更好的整合调试器,我们对Rails框架整体进行了一系列的改进。我最得意之作就是调试器的断点功能回来了,这不仅仅只是一个类似irb dump那样的断点数据观测,而是一个真正的调试器。你可以单步前进、单步后退、列举当前位置等等。这完全得益于ruby-debug这个gem包,所以我们推荐你安装这个gem包,然后Rails新的调试器就可以工作了。

如果你想使用调试器,那么首先安装ruby-debug这个gem包,然后把“debugger”命令写在你的应用程序当中,接着用- debugger或者-u参数启动服务器,当代码执行到debugger命令的地方,你就可以在运行服务器的终端上面直接操纵应用了,完全不需要使用 script/breakpointer或者其他的什么东西。当然你还可以在单元测试当中使用调试器。

Rails: Clean up your environment

在Rails2.0之前的版本,config/environment.rb当中塞满了各种各样的启动配置信息和代码。现在你可以把这些东西分门别类的放在独立的文件当中,然后把文件放在config/initializers目录下面,当Rails应用启动的时候,它们就会被自动的加载。新的 Rails2.0应用自带了两个这样的例子,分别是inflections.rb(定义你自己的单复数规则)和mime_types.rb(定义你自己的扩展类型)。我们鼓励你把启动配置信息放在独立的文件里面,而不要去改动environment.rb文件。

Rails: Easier plugin order

现在我们开始把很多功能从Rails剥离出来放到插件里面去了,你也许有可能有一些其他依赖这些功能的插件。例如在你自己的 acts_as_extra_cool_list插件被加载之前,需要首先加载acts_as_list插件,因为 acts_as_extra_cool_list扩展了acts_as_list。

在Rails2.0之前,设定插件的加载次序需要你在config.plugins里面列举所有的插件。这种做法主要的问题是当你仅仅需要 acts_as_list插件加载次序在前,而不关心其他插件加载次序的时候,未免需要多写太多东西。而现在你仅仅这样写就可以了: config.plugins = [ :acts_as_list, :all ]。

And hundreds upon hundreds of other improvements

上面我提到的这么多特性也仅仅只是Rails2.0的冰山一角。我们可以列举出来成千上万的bug修复、功能调优、新功能的添加。许许多多的热情的贡献者不知疲倦的在各个细节上面改进Rails框架,但是这些工作都是非常重要的。

我希望你能够不介意麻烦去阅读Rails的CHANGELOG,了解更多的Rails2.0的改进。

So how do I upgrade?

如果你希望升级到Rails2.0,那么你应该首先升级到Rails 1.2.6版本。它对于所有在Rails2.0当中被挪出去的功能给出了警告信息。如果你的应用程序在Rails 1.2.6上面良好的运行,并且没有任何警告信息,那么你就可以升级到Rails 2.0了。当然如果你用到了Rails的分页的话,你需要安装classic_pagination这个插件。如果你需要使用Oracle数据库,那么你需要安装activerecord-oracle-adapter这个gem包,诸如此类等等等等。

Posted on December 31, 2007 10:09 AM | | Comments (0) | TrackBacks (0)

Ruby 程序设计语言于当地时间圣诞节正式发布了1.9版。

Ruby 1.9的新特性一经公布就引起了Ruby开发者们的关注。新版有许多改进,其更新记录高达4万行之多。以前Ruby语言最为人诟病的问题是执行速度缓慢,新版在这方面有很大的进步,它提供一个新虚拟机能够大幅度提升运行效率。

Antonio Cangiano曾在一份关于《各种Ruby实现的性能对比》报告中,对不同版本的Ruby进行了性能测试与比较,包括Ruby 1.9.0、Ruby 1.8.6,也包括Python 2.5.1。在Mac OS X 10.5系统之下,使用斐波那契递归函数对三者的递归与函数调用进行测试,发现同样的循环次数中,Ruby 1.8.6用时158.869秒、Python 2.5.1用时31.507秒,而Ruby 1.9.0仅用时11.934秒。Ruby 1.9版本相对于Python,性能的超越大致在三倍左右。

尽管Ruby 1.9给出了诸多的改进,但在发布的相关网站中还是着重强调了“This is not Ruby 2.0!”:这表明Ruby 1.9并不能代表未来的Ruby 2.0版本。在Ruby的SVN存储库的HEAD版本之中,Ruby开发团队正在不断尝试一些新奇的改进和完善。

今年的十二月份无疑是Ruby开发者的幸福月,因为除了Ruby 1.9的发布,Ruby社区还迎来了新版Rails 2.0的发布。随着新版Ruby与Rails的发布,Ruby社区将会掀起新一轮的开发热潮。(csdn)

Ruby 1.9.0 is released:http://www.ruby-forum.com/topic/136553 

Changes in Ruby 1.9:http://eigenclass.org/hiki.rb?Changes+in+Ruby+1.9

Posted on December 27, 2007 3:11 PM | | Comments (0) | TrackBacks (0)

基于Ruby语言的开发框架Rails 推出2.0新版。新增多项企业级运用所需的技术,包括对信息安全、交易、效能等方面机制的改善,可用来协助企业在需求快速改变的Web环境中,进行快速开发。

Rails框架作者David Heinemeier Hansson(简称DHH)本月初于Ruby on Rails(简称RoR)官方部落格发布Rails 2.0正式版。Rails这种敏捷开发的框架,从2004年推出后,因为开发框架大受欢迎,而使得开发语言Ruby开始流行,甚至挤进全球开发语言排行前10名,去年还获得欧美与日本开发市场的高度关注,CodeGear大中华区技术总监李维表示:「RoR风行的情形,类似1990年的Java,也将开始走入企业应用。」历经4年,DHH终于再度推出第2版,并且增强企业最关心的信息安全、数据交易(transition)、效能等方面的功能。

在Rails 2.0的新特色,增强了许多企业级应用所需的开发机制。例如新版最重要的其中一项特色是,在数据交易上,更完整的支持REST,这种连Amazon或Yahoo都在使用的网络数据交换方式。一般企业网站应用提供Web Service时,多采用SOAP或XML-RPC的数据封装方式,来进行XML数据的传递。但不同于SOAP或XML-RPC,REST可以提供更贴近HTML协议,也更简洁的XML数据存取方式与参考结构,有利于简化不同网络应用之间传递数据的开发过程,有助于进行快速开发,或需经常变更数据架构的网络应用。

另外新版本也强化了企业近年来最担心的信息安全机制。例如Rails 2.0内建HTML窗体和Ajax请求的验证机制,可以检测是否来自正确授权网站的数据请求,避免被拦截或伪造。对于常见的跨站攻击(XSS),也能够从过去检查黑名单的方式,预设为更主动的白名单验证,只开放授权网站存取。此外还新增一个模块来处理HTTP的基本身份验证,开发人员可以很容易让取得存取授权的API程序,跨越SSL协议。这些信息安全机制,过去得相当费力自行开发,现都直接纳入Rails新版的默认功能,企业可以直接使用。

效能是Rails 2.0第三个重要改善。采用RoR的Twitter网站,曾发生因为使用量暴增而效能不彰的情况,引起开发社群对RoR效能的疑虑和争辩。在Rails 2.0中,追加查询暂存(query cache)的机制,让重复出现的相似查询指令,存取相同的暂存数据,减少数据库的读取负担。另外也在异常管理功能中,新增一个request profiler的指令,可以用来追踪一支程序实际使用的过程,产生每个步骤运行时间的报表,可以用来找出实际运作上的效能瓶颈,作为进一步优化程序的依据。

新版Rails在信息安全、交易与效能上的改进,李维认为:「让RoR满足企业级开发需求,不只是个人或小型开发。」但他不认为RoR会取代企业现有的开发方式,他认为RoR快速的雏形开发能力,可以协助企业解决像入口网站或对外网络服务,这类经常需要应变的开发需求,而像核心系统或复杂应用,还是需要更强的开发语言。台大计中程序设计组组长也是资工系副教授吕学一同意这个看法:「台大常有很多小型开发需求,其实也相当耗人力,因此需要功能不用很强但开发很快的工具。」台大也有意采用RoR来解决这类小而快的需求。

除了RoR开发框架增强对企业应用的支持之外,也开始出现整合式的RoR IDE开发工具。目前已有供企业开发RoR的IDE工具,例如像Sun将推出的NetBeans 6.0,或CodeGear甫在台发表的RoR专用开发工具3rdRail,都已经支持到RoR前一版本。李维表示:「明年第一季3rdRail会推出新版,支持RoR 2.0版,并提供专属的Rails框架除错功能。

Rails 2.0新增功能
Rails功能類別     增強項目
Action Pack     ● 增強對RESTful方式的實現。將分號區隔定字的方式改成斜線。開發人員可自訂URL 路由的命名規則。
● 增強Multiview,可以在樣版(Template)中控制不同的呈現樣式。
● 建立大量命名預設規則,簡化Controller和View的URL。
● 新增處理HTTP基本驗證的模組,提供授權API跨越SSL。
● 新增瀏覽器請求靜態資源的分配機制,可分散伺服器的請求負擔。
● 內建處理CRSF攻擊的查驗機制。
● 增加白名單驗證功能,可預防跨站腳本攻擊。
● 使用Cookie來儲存Session資料。
● 新增request profiler,可供追蹤一支程式中每個步驟的實際執行時間,用來判斷效能瓶頸。
Active Record     ● 提供SQL查詢的暫存。
● 新的Migration方式,簡化宣告方式。
● 增強對XML的支援,如還原XML序列的功能。
● 將商用資料庫移出預設。
其他     ● 回復中斷點除錯的功能。
● 簡化對外掛模組的管理。

資料來源:David Heinemeier Hansson,iThome整理,2007年12月 (IThome)

Posted on December 24, 2007 4:42 PM | | Comments (0) | TrackBacks (0)

<实例教程>
Flex 和 ROR 结合应用的教程
http://www.railscn.com/about660.html

一个结合flash,rails和ajax一起的购物车程序(教程)
http://www.railscn.com/viewtopic.php?t=639&sid=7558f51c768090c52947e01c1dc8885c

12个顶尖实例
http://oio.zzdragon.name/?p=98

高级Rails ajax教程
http://www.railscn.com/viewtopic.php?t=621&sid=1777733ef6a90f744b9fdc3361c81d96

<手册>
rails1.1新特性介绍
http://www.railscn.com/viewtopic.php?t=522&sid=7558f51c768090c52947e01c1dc8885c

rails 1.1 api chm
http://www.railscn.com/viewtopic.php?t=552&sid=7558f51c768090c52947e01c1dc8885c

Ruby-Library-QuickRef
http://www.railscn.com/viewtopic.php?t=564&sid=7558f51c768090c52947e01c1dc8885c

Understanding Ruby's Object Model
http://www.railscn.com/viewtopic.php?t=563&sid=7558f51c768090c52947e01c1dc8885c

<论坛>
http://www.railscn.com
http://chinaonrails.com
http://forum.javaeye.com
http://rorwiki.hellopen.net

<博客>
铁道播客:有诸多视频教程
http://rorcast.blogger2blogger.com/

my4java的文字博客:有很多教程的译稿、笔记等
http://my4java.itpub.net/

cnruby道喜技术日记:众多实例教程
http://www.hhtong.com/blog1/

caphe的博客
http://www.blogjava.net/cap

Caiwangqin的博客
http://www.uuzone.com/blog/uu_1115110/

<工具使用>
rails的IDE讨论
http://www.railscn.com/viewtopic.php?t=3&sid=7558f51c768090c52947e01c1dc8885c

rails的IDE讨论另一篇
http://www.railscn.com/viewtopic.php?t=510&sid=7558f51c768090c52947e01c1dc8885c

JEDIT与ror的讨论
http://www.railscn.com/viewtopic.php?t=518&sid=7558f51c768090c52947e01c1dc8885c

komodo
http://www.railscn.com/viewtopic.php?t=310&sid=7558f51c768090c52947e01c1dc8885c

dreamweaver的可下rubyweaver
http://www.railscn.com/viewtopic.php?t=451&sid=7558f51c768090c52947e01c1dc8885c

<环境设置>
ROR with Lighttpd+SCGI on Windows
http://www.railscn.com/viewtopic.php?t=348&sid=7558f51c768090c52947e01c1dc8885c

ROR with Lighttpd问题
http://www.railscn.com/viewtopic.php?t=618&sid=7558f51c768090c52947e01c1dc8885c

lighttpd+scgi 多域名配置
http://www.railscn.com/viewtopic.php?t=471&sid=7558f51c768090c52947e01c1dc8885c

大负荷下apache+fastcgi出错问题,
http://www.railscn.com/viewtopic.php?t=589&sid=7558f51c768090c52947e01c1dc8885c

装fastCGI+MySQL驱动时候的问题
http://www.railscn.com/viewtopic.php?t=566&sid=7558f51c768090c52947e01c1dc8885c

typo的安装问题
http://www.railscn.com/viewtopic.php?t=633&sid=7558f51c768090c52947e01c1dc8885c

Getting start rails' - 在DreamHost上建Typo
http://www.railscn.com/viewtopic.php?t=377&sid=7558f51c768090c52947e01c1dc8885c

ROR性能测试
http://www.railscn.com/viewtopic.php?t=454&sid=7558f51c768090c52947e01c1dc8885c

Memcache-client for Ruby On Rails
http://www.railscn.com/viewtopic.php?t=394&sid=7558f51c768090c52947e01c1dc8885c

<空间申请>
free hosting ROR
http://www.railscn.com/about703.html

HostingRail.com - 免费Ruby on Rails空间
http://www.railscn.com/viewtopic.php?t=628&sid=7558f51c768090c52947e01c1dc8885c

免费的webhosting-ror 100mb
http://www.railscn.com/viewtopic.php?t=504&sid=7558f51c768090c52947e01c1dc8885c

国内的Ruby on Rails空间
http://www.railscn.com/viewtopic.php?t=285&sid=7558f51c768090c52947e01c1dc8885c

<真实应用>
中文站点
http://www.railscn.com/about670.html
http://www.railscn.com/viewtopic.php?
http://www.railscn.com/about337.html
外国站点
http://www.railscn.com/viewtopic.php?t=505&sid=7558f51c768090c52947e01c1dc8885c

<杂类>
框架比较J2EE, Rails, Zope(and more..) 视频
http://www.railscn.com/viewtopic.php?t=641&sid=7558f51c768090c52947e01c1dc8885c

groovy on rails
http://www.railscn.com/viewtopic.php?t=599&sid=7558f51c768090c52947e01c1dc8885c

用户登录引擎(共两部分)
http://www.railscn.com/viewtopic.php?t=434&highlight=login&sid=6d906cbcb22afe0eda158d772b0a72c2
http://www.railscn.com/viewtopic.php?t=435&highlight=login&sid=6d906cbcb22afe0eda158d772b0a72c2

如何开启一个后台任务?railscron
http://www.railscn.com/viewtopic.php?t=623&sid=7558f51c768090c52947e01c1dc8885c

如何上传一个文件
http://www.railscn.com/viewtopic.php?t=635&sid=7558f51c768090c52947e01c1dc8885c

如何更改首页
http://www.railscn.com/viewtopic.php?t=409&sid=7558f51c768090c52947e01c1dc8885c

Posted on October 10, 2007 10:20 AM | | Comments (0) | TrackBacks (0)
1 2
相关内容
广告计划
最新评论
[评论] Andy : I always enjoy learning what other people think ab
[评论] 大可山 : 嗯,开放API对报纸等平面媒体的确是个好主意!
[评论] 鸿雁 : 默默地为他们祈祷吧
[评论] lym328 : 客源CRM非常不错-----如有需要可以了解一下! 可以帮助企业轻松获得大量目标客户来源,促使市场
[评论] kevinwu : 作用肯定是有的,Google会首先搜索站点的sitemap.xml文件,增加搜索的频率;国内的用户,
[评论] ss : 其实还真的感觉不到sitemap的作用~
[评论] kevinwu : 谢谢你的关注 :-)
[评论] h51h : 贵博客写得非常的好,界面简洁但内容却十分丰富 <a href="http://sexeden.blo
[评论] snguo : 这里很好 来这里支持下呢?
[评论] redondo : 感谢你分享知识! 这篇文章我转载到我的博客——Redono的日记本。 链接已注明来源。 欢迎光临Re