新手问题 看 Rails 项目源码,该从哪里入手

zhen9ao · 2013年08月13日 · 最后由 quyun1234 回复于 2013年08月14日 · 8207 次阅读

看完了 AWDWR 和 Rails Tutorial,最近打算找个源码来读读,于是开始看 19wu 的源码。

但是在看的时候发现一个问题,不知道从何入手,尤其是项目里用到了很多 Gem,每个 Gem 又有独特的用法,每次看的时候才进入状态,就又被新东西阻碍住了。

请教一下大家是如何阅读 Rails 代码的呢?

从需求入手,搞个二次开发,想改什么地方就大胆的去改

#1 楼 @gaicitadie 还没到能二次开发的程度。。就是现在怎么能一下子掌握住项目的主体,现有的东西是怎么做的,以及为什么这样做。

从自己写入手。我都没看过几个项目,看的时候都是带着明确目的性的,比如别人实现了一个我不懂实现的功能,然后我去看别人怎么实现的。

我觉得现在有点早,先做个项目先。没有目的的看代码不会有什么收获的。

你说你看着看着就被新东西卡住了……读源码本来就是这样的啊,如果从头到尾都没什么东西能卡住你,那也就不用看了。

#2 楼 @zhen9ao 如果像看小说或看教程那样逐行的看代码,坚持不下去的,看不了几个文件就看腻了

@Rei @jimrokliu 嗯,想想也是,对于不知道要做一个什么项目的人来说可咋办。。我想那种开源项目会不会也算是一个目标?

#5 楼 @nightire Rails 学到后面,是不是就是在学习各种 gem 如何使用了啊。。

#8 楼 @zhen9ao 如果你是想学 Rails 本身,而不是各种 Gem 实现的独立功能,那么你应该直接去看 Rails 的源代码,而不是用 Rails 写的应用程序的源码。

如果你想学的是用 Rails 做应用,那么在框架基本用法熟悉之后,当然就是跟各种 Gem 打交道了。不过 Gem 本身无非就是封装好的解决方案,所以你也完全可以不用 Gem 自己去实现相应的功能,这时候你关注的应该是 Ruby。

#10 楼 @nightire 我感觉去读 Rails 源码应该算是比较高级的了。。。一开始可能就是使用吧

#6 楼 @gaicitadie 就是不容易坚持下去,可能还是自己从一个小程序写起,然后一点一点增加功能,这样也有意思一些

@Rei @jimrokliu @nightire @gaicitadie 想请教一下如果各位在读源码的时候,有没有什么自己觉得比较合适的前后顺序或者是实践呢

楼主去翻 @xdite 的 blog。她写过一篇。

#14 楼 @blacktulip 你说的是这个? http://blog.xdite.net/posts/2012/11/24/how-to-read-sourcecode 可能是我的帖子说的不明确哇,我的意思是看用 Rails 写的开源项目的代码,不是 Rails 这个项目的代码。。。

先看集成测试或者功能测试,后看代码。不知道这个方法对不?

#17 楼 @chunlea 不能确保每个项目的测试都覆盖的很全吧?

我也没从头看过,都是偶尔找一些东西的时候,翻翻源代码

#19 楼 @huacnlee 是不是因为每个项目因为需求不同而实现不同,但是 Rails 的项目结构基本上比较固定,所以可以借鉴的东西就是一些自己不会的新东西?

#20 楼 @zhen9ao 实际原因是看不懂...

仔细看看 rails 源码的注释 感觉对使用 rails 和理解 rails 源码有很大帮助。个人体会 我最近也才开始看

#22 楼 @young4u_amy 这就像看 test 一样,并不是所有人的代码的注释都写的那么好呢。。。

#24 楼 @zhen9ao 所以要挑一些名气大的项目 rails 本身就不错

如果能跑起来的项目,先跑起来,根据 url 定位到 route,到 controller,到 model 等,顺藤摸瓜。看看 Gemfile 用了哪些 gem,不熟悉的 gem 去 github 搜索下看下用法。 跑不起来的项目,就先尽量跑起来再说。

匿名 #27 2013年08月13日

哥太硬了!已经开始研究 Rails 的源码了!

去解决一个 19wu 里的问题

花擦!这么牛 研究源码 我嚼的 你研究完 Gemfile routes.rb database.yml migration model view controller assets 就可以开始做了

如果想看一个部分,就单看一个部分。让代码跑起来,服务器用到了那个 controller 之类的。感觉有点想 debug 的感觉。

如果想全面了解。 1,先让代码跑起来。知道这个怎么用之类的。比如,你要看注册,先自己注册一下。 2,了解主要的部分。database schemea,import classes。 Gem 有 railroady,可以显示数据库之间的关系,model 之间的关系。找到最重要的(简单来说,就是链接最多的。。),了解最重要的。这个时候,看看文档了之类的。如果有 feature,看下 feature。不太需要考虑细节。 3,然后具体看某个部分。

有的是建议写测试(characteriztion test ,简单来说,比如我觉得 1+1 = 3,我就写测试,1+1.should =3,错了再改,对了为止)。但这种感觉难度很大,因为我 rspec 用的不熟悉。。。

19wu 的话...直接来贡献代码就好,有很多 issue 不难,而且要用做 rubyconfchina 的售票系统呢,顺便满足下成就感~

#26 楼 @blackanger 现在感觉把项目跑起来比较容易,我现在用rake routes看到底有那些 routes。比如 19wu 的代码,看那些 gems,一个接一个的,感觉好累,是不是过了这个累的阶段就好了。。。。

#27 楼 @francistm 点儿都不硬啊。。。想找点儿写的好的东西读读,找些指导思想撒

#28 楼 @ichord 喔,还没把握整个项目的脉络呢,谈不上解决 issue,顶多能提一些 issue 😥

#33 楼 @zhen9ao 等你 github 上收藏的 repo 到 1000 个以上就应该很熟悉这些了

#32 楼 @jasl 纯初学。。还谈不上贡献代码,不过每天看着 Github 上讨论的那么活跃,心里很痒痒 😃

#36 楼 @jjym 我去看了眼自己的 stars,总共才 200 多个。。。看来还很漫长

#29 楼 @ChanceDoor 牛就不会在新手问题里面提问啦~ 光看简单的还是能看的懂,估计自己写起来还是悬。像上面很多牛人说的,还是得从自己写的项目入手,一点儿一点儿整

#30 楼 @yfractal 你说的信息量很大,肯定要在实践中才能领悟透彻 :satisfied:

#33 楼 @zhen9ao 对。还得了解 Ruby 啊。慢慢看,不要贪多。

先从 ActiveSupport 看起,很多 Rails Contributor 的经验

#41 楼 @blackanger 嗯,开始我看了一部分 Ruby,了解了皮毛,然后就开始看 Rails 了,结果发现看 apidoc 都看不懂,后来返回来再仔细看看 Class Module 等的知识,才能大概知道怎么看 apidoc 了。。。

#42 楼 @Yujing_Z 哦!可以试试!我看 AWDWR 那书里 ActiveSupport 也说的很少

#44 楼 @zhen9ao Support 比较简单,都是些语法糖和让你写 rails 更轻松的 helper

#37 楼 @zhen9ao 19wu 的水平的话,能独立开发界面不丑(挂个 bootstrap)的论坛,就可以去提交代码了,提交不上去也没关系,自己研究过有收获就好了嘛 我是上周加入开发的,其实代码里存留有很多多余的空行,错误的拼写、缩近,在你仔细阅读的时候,应该会发现不少,让代码看上去更美观,其实是更有意义的贡献,这会让其他人更流畅的阅读,减少重构时的负担

#44 楼 @zhen9ao 对了,rails 里的槽点也非常多...开源项目的质量其实没你想象那么高的,细心总能成为 contributor

想要理解他的设计思想。。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号