读书人

rails3项目解析之二rails基础

发布时间: 2012-11-04 10:42:42 作者: rapoo

rails3项目解析之2——rails基础
rails3项目解析之1——系统架构
rails3项目解析之3——redis


rails 3.0是2010年8月份发布的。迄今为止,3.0已历经多个tiny版到了3.0.8。3.1已经放出rc4,看起来离正式版已为期不远。相对于2系,3系还是有一些令人惊喜的变化,而且在架构上也规范和严整了许多。3.1中更是又加入了几个颇为有趣的特性。我们的项目一直都是紧跟rails新版,很欣慰能够毫无道德压力地做一个喜新厌旧常换常新的男人。但什么都追新也吃了不少小苦头,不过仍然死不悔改,大家都在坐等3.1发布试吃。

更多关于rails3的新特性,网上一抓一把,需求和欲望比较强烈的同学可自行解决,在此不再赘述。下面主要说一下我们这个项目。因为项目不大,而且第一期没有太多用户互动的内容,所以涉及到的知识范畴比较小,都是些基础的东西。

1、目录结构

除那些默认目录之外,我们在项目中又另外加了一些自定义的目录来做不同的事情。

1.1 errros/。在app/目录之下,内容是各种自定义的XxxError类。使用异常机制能够使得代码更加清晰,流程语义更准确,更好地实现模块化的程序结构。

1.2 validators/。在app/目录之下,内容是继承自ActiveModel::EachValidator的各种验证类。使用自定义验证类能够使代码更加简洁,复用性更强。如:


其中$recommend_pageid是rails在初始化时计算的该片段文件的md5值,这样如果该片段文件有改动,缓存中就不存在这个新的key “recommend_xxxxxx”,rails将重新生成该片段的缓存。这个方法既可使用片段缓存提高渲染速度,又可实现片段文件改动时的缓存自动更新。

使用片段缓存之后,首页渲染时间降低到了200ms左右,基本满足了要求。当然我们还留了一部分页面代码没做缓存。作为一个懂人情讲政治的开发团队,要给自己留出足够的业绩提升空间以体现自身价值,并且给领导留出足够的命令空间以展现领导权威。这样下一次领导再让你进一步缩短首页访问时间时,双方可皆大欢喜。

6、rails on windows

首先我承认,windows确实很不适合rails开发,尤其是那个执行效率,生活在mac和ubuntu上的幸福的人儿是永远都体会不到的。不过,如果rails只是我生命中的一小部分,其它大部分事情我确实需要在windows上做,而且我还很不喜欢虚拟机,那就要研究在windows上开发rails了。本节内容仅是给喜欢windows的同学提供一点参考,ubuntu和mac控可鄙视加无视。

其实解决方案很简单,就是使用rubyinstaller,同时安装devkit。基于mingw32的这套系统应该还算不错,到目前为止,一般的需要编译的gem象mysql2、nokogiri等等都没问题,最多也就是加几个参数,便可编译安装。迄今只有SystemTimer因为使用到了linux的底层SIGALRM而无法安装,不过也可以想个办法绕过去即可,不影响实际使用。

我的操作系统是windows 7 sp1 ultimate x32,不要用x64,x64下的mysql2安装会有一些莫名其妙的问题。感觉x32位还是比x64方便,一般不会出兼容性问题。至于4G内存的限制,打个补丁就行了。
感谢~感谢~ 8 楼 QuakeWang 2011-06-11 引用
4.5 js框架。rails 3.0的默认js框架仍然是prototype,在jquery大行其道的今天,这个做法有点逆潮流而动。作为某些简单的js功能,用js generator是省时省力的做法,代码也干净。找了一个N年前就不更新的rails2的jquery rails,改了改使之适用于rails3,简单功能先凑合着用了。还好,3.1终于把默认js框架改成jquery了,当真是从善如流,幸甚至哉。

在3.1之前如果想用jquery的话,推荐
https://github.com/rails/jquery-ujs
9 楼 agile_boy 2011-06-12 受教了,谢谢分享。 10 楼 jn615 2011-06-12 学习了, 不错的东东 11 楼 edokeh 2011-06-13 第一次听说client_side_validations,之前我看到最好的前端验证框架是jquery validate,不知道client_side_validations的功能与定制性究竟如何,但是能与后端公用一套校验规则,还是很吸引人的 12 楼 seamon 2011-06-14 QuakeWang 写道引用
4.5 js框架。rails 3.0的默认js框架仍然是prototype,在jquery大行其道的今天,这个做法有点逆潮流而动。作为某些简单的js功能,用js generator是省时省力的做法,代码也干净。找了一个N年前就不更新的rails2的jquery rails,改了改使之适用于rails3,简单功能先凑合着用了。还好,3.1终于把默认js框架改成jquery了,当真是从善如流,幸甚至哉。

在3.1之前如果想用jquery的话,推荐
https://github.com/rails/jquery-ujs


我们现在用的就是ujs,不过ujs只是在表单等基础层面上替换为jquery,我说的是用jquery实现rjs,象replace_html这些简单的功能。

现在rails 3.1用的是jquery-rails,也兼容3.0。不过还是不支持rjs,官方的意思是rjs已经被踢出去了,默认不再支持。prototype和rjs被移到prototype-rails了。

jrails的作者问过jquery-rails的作者,问他们想不想加入jquery对rjs的支持,结果人家没鸟他,意思是3.1已彻底放弃rjs了。看来谁想在3.1继续用rjs又不想引入prototype,得寻求其它解决方案,或者自己搞一个jquery-rjs。 13 楼 richyzhang 2011-06-14 rjs已经被抛弃了。rails3.0的时候已经很明显了。对新手来说,rjs还是很棒的,可以一点不懂js照样写出dhtml和ajax的应用。然而,随着越来越多的js高手的出现,rails团队自身对js的熟练,现在提倡直接写js。不过js虽然很强大,却难看了点,于是又搞出了coffeescript。

你说的replace_html基本上现在可以这么写

<%=link_to “say hello”, { :controller => “welcome”, :action => “say” }, :id => “ajax-load”, :remote => true, “data-type” => “html”%>

:id指明了要replace的内容,date-type说明返回的是一个html,:remote表示是一个ajax调用。 14 楼 edokeh 2011-06-20 想知道LZ是如何部署的,不知道能不能再写一篇文章 15 楼 seamon 2011-06-27 edokeh 写道想知道LZ是如何部署的,不知道能不能再写一篇文章

部署的会写,可参见第一篇末尾的计划。不过什么时候写就不保准了,尽快吧。 16 楼 keer2345 2011-06-30 rubyinstaller.org 是不是被墙了?打开不了页面,唉 17 楼 wowpzp 2011-06-30 请问楼主acts_as_list、acts_as_state_machine 应用在什么场合呢?有什么优点呢?谢谢!

读书人网 >网络基础

热点推荐