[ruby off rails] 《rails解密》和《sinatra解密》系列文章预告
花花公子
2009-09-10
为了挽救成千上万被rails魔法迷惑而无法深入学习ruby的开发者,揭露rails隐藏起来的复杂性,宣扬sinatra的简单性。我决定写一些相关源码分析的文章,也欢迎大家对这个问题的简介。
但是,由于我要准备年末的日语能力考试,不会在这个方面花太多时间,更新时间由心情决定。 写文章的计划是先写rails创建命令,script目录下各个脚本,默认rake任务的分析。ActionPack和ActiveRecord的源代码看了会让人吐血,我会在比较后面再介绍,介绍也只会找其中的某几个部分。ActiveSupport内容太多,ActionMailer,ActiveResource用都不想用,就不在计划中了。 Sinatra的源代码虽然只有1000多行,但1000多行也是干了很多事情的,并没有数字看上去那么好分析。有时间我也会慢慢写的。 |
|
花花公子
2009-09-10
从“相关文章”看过去,原来已经有人作了些工作的。他分析了rails启动以后,居然接下来就是rails的routes,这部分代码丑陋难看,实在是ruby代码的反面典型。我是不会教人如何从rails的routes代码知道如何更好的写routes.rb的,那样的话自己很有可能先吐血身亡。
|
|
花花公子
2009-09-10
刚才看了一下boot.rb,才发现rails自动生成的文件干了多少龌龊事,最龌龊的是
def gem_version if defined? RAILS_GEM_VERSION RAILS_GEM_VERSION elsif ENV.include?('RAILS_GEM_VERSION') ENV['RAILS_GEM_VERSION'] else parse_gem_version(read_environment_rb) end end def parse_gem_version(text) $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/ end private def read_environment_rb File.read("#{RAILS_ROOT}/config/environment.rb") end 最让我震惊的是boot.rb必须知道environment.rb的存在,而environment.rb本身是会require 'boot.rb'的。如果environment.rb不存在,我想不出来boot.rb存在的意义。估计这样的设计和rails版本之间过大的差异,需要保证兼容性有关。 |
|
Hooopo
2009-09-11
火星叔叔马丁 写道 坐板凳 看花花更新
我准备重启翻译 guides.rubyonrails.org计划 精神上支持。。 |
|
night_stalker
2009-09-11
火星叔叔马丁 写道 坐板凳 看花花更新
我准备重启翻译 guides.rubyonrails.org计划 把无聊的灌水人员组织起来联翻,可以两天搞定。 |
|
mccxj
2009-09-12
花花公子 写道 为了挽救成千上万被rails魔法迷惑而无法深入学习ruby的开发者,揭露rails隐藏起来的复杂性,宣扬sinatra的简单性。我决定写一些相关源码分析的文章,也欢迎大家对这个问题的简介。
但是,由于我要准备年末的日语能力考试,不会在这个方面花太多时间,更新时间由心情决定。 写文章的计划是先写rails创建命令,script目录下各个脚本,默认rake任务的分析。ActionPack和ActiveRecord的源代码看了会让人吐血,我会在比较后面再介绍,介绍也只会找其中的某几个部分。ActiveSupport内容太多,ActionMailer,ActiveResource用都不想用,就不在计划中了。 Sinatra的源代码虽然只有1000多行,但1000多行也是干了很多事情的,并没有数字看上去那么好分析。有时间我也会慢慢写的。 看公子经常提到Sinatra,我到现在也没去了解这是个什么来的,汗呀 ps:rails的源码真的很吐血 |
|
花花公子
2009-09-14
刚才试了一下。如果是用gem版rails,它真的会用正则表达式分析一下config/environment.rb。这意味这所有script目录下的脚本执行的时候都会进行这一步,速度就是这样浪费的。
|