现在的位置: 首页 > 综合 > 正文

转rails加载

2018年01月10日 ⁄ 综合 ⁄ 共 3133字 ⁄ 字号 评论关闭

转rails加载

2010-05-14 14:14 67人阅读
评论
(0) 收藏
举报

http://blog.csdn.net/saint1126/archive/2010/04/29/5541171.aspx

 

 

《Rails高级编程》前言介绍说这不是为初学者准备的,读者应该对web构架有所了解,很好的掌握ruby1.8,有使用ruby on rails的网站开发经验。还推荐了一些读者本书之前应该读的一些图书。作者推荐的下面几本书都是很不错的,不过有些还没看。

1、《ProgrammingRuby》,第2版,之前看类和模块的部分。

2、《TheRuby Programming Language》,该书对ruby1.8和ruby1.9都做了详细的介绍,目前正在读,十分不错的一本书。

3、《Bestof  Ruby Quiz》,该说选择了25道难题,然后给出了解决方案。

4、《AgileWeb Development with Rails》,现在第三版的中文版也有了。几乎是rails的入门必读书籍。

5、《RailsCookbook》,在图书馆看到了,一时看不完。等下下个月在看下。

这些都是一些学习ruby和rails的参考书籍,十分优秀的著作。自己以前都是用东西,上网查,很不系统,读书的乐趣就在于能够告诉你理论,从理论的角度出发去解决问题,是一种“授人以渔”。

书归正传,本书开始讲解的是ruby的一些基本知识。看了下,就当是复习了,不过收获还是挺大的,温故而知新。

从学习rails开始,总是学习ruby api,rails api之类的,不太了解rails的运行的各个步骤,不能高屋建瓴的统筹下,api在熟练总觉得缺点什么,不能达到收放自如的地步。因此,我一直想找一些rails应用程序初始化和运行过程的资料,系统的了解和认识下,并试着自己去亲手配置,学习下。

先看下initializer.rb文件,Rails::Initializer是用ruby处理Rails环境设置初始化的主类。应用的初始化是从config/environment.rb开始的,它包含了这样的block:

Rails::Initializer.run do |config|

       #

       end

Rails::Initializer.run生成一个新Rails::Configuration对象到block中。接着run方法创建一个新的Rails::Intializer对象,并调用process方法,该方法执行下面的步骤来初始化Rails:

1.      check_ruby_version:确保使用的是1.8以上

2.      set_load_path:将框架路径加载到ruby加载路径中,如果说存在的话即存在,vendor/rails或者RAILS_FRAMEWORK_ROOT,如果使用的是ubuntu操作系统的话,并且采用apt-get安装的ruby和rails系统会在每个的rails应用程序的vendor目录下会有一个rails的文件。

3.      require_framework:加载在frameworks配置选项中列出的每个框架,如果没有则认为是RubyGems安装的。

4.      set_autoload_paths:根据配置变量load_paths和load_once_paths设置自动加载路径。参数与第二步一致,用于处理未知变量和方法的时候。

5.      load_enviroment:加载并执行环境相关(development,product,test)配置文件

6.      initialize_encoding:设置$KCODE为u来使得整个Rails支持UTF-8

7.      initialize_database:如果使用了ActiveRecord,设置它的数据库配置,并连接到相应的数据库服务器。

8.      initialize_logger:设置成logger,将顶级的RAILS_DEFAULT_LOGGER设置到该实例,如果在配置中指定logger就使用它,如果没有,就会创建一个新的logger并定向到log_path指定的那个,如果失败了,会显示一个警告,并把log重定向到标准错误输出。

9.      initialize_framework_logging:把ActiveRecord,ActionController,ActionMailer设置成刚刚初始化的logger。

10.  initialize_framework_views:把ActionController和Action Mailer设置view_path值,代表了视图路径。

11.   initialize_dependency_machamism: 基于cache_classes配置项的值,来设置Dependencies.mechaism(他决定了是用require还是load来加载文件),那好来看下require和load的区别吧:require,load用于文件,如.rb等等结尾的文件, require一般情况下用于加载库文件,而load则用于加载配置文件,require加 载一次,load可加载多次。

12.  initialize_whiny_nils:如果Whiny_nils配置项设置为true,就会给NilClass添加Whiny Nil扩展(对nil上调用id或其他方法时他会抱怨)

13.  initialize_temporay_directories:设置ActionController的临时session和cache目录,如果他们存在文件系统中。

14.  initialize_framework_settings:将框架特定的配置项转换到框架Base类的方法调用上。例如,考虑这样的配置选项:

config.active_record.schema_format =:sql,config.active_record对象是一个Rails::OrderedOptions的实例,他从根本上是个有序hash(目的是让配置保持顺序)。在初始化期间,initialize_framework_settings方法将他转化成为下面的形式:

ActiveRecord::Base.sechema_format = :sql

15.  add_support_load_paths:给支持的功能添加加载路径。

16.  load_plugins:从plugins配置项指定的路径加载插件(默认从vendor/plugins)。如果指定了一个plugins的配置项,就按它指定的顺序加载插件,加载plugin是在接近整个进程的尾声时进行的,所以他们可以覆盖已加载的插件。

17.  load_observers:实例化ActiveRecord的Observers。他是加载完plugin之后要做的,因此plugin有机会修改这些observer类。

18.  initialize_routing:加载处理routes,并根据controller_paths配置项设置Controller路径

19.  after_initialize:调用所以用户自定义的after_initialize回调,这些回调是在config.after_initialize{…}block里定义的。

20.  load_application_initializers:加载所有的RAILS_ROOT/config/initializers及其子目录的ruby文件。

至此为止,rails已经准备好请求了。

抱歉!评论已关闭.