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

转rails加载

2018年04月19日 ⁄ 综合 ⁄ 共 3096字 ⁄ 字号 评论关闭

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

 

 

Rails

高级编程》前言介绍说这不是为初学者准备的,读者应该对

web

构架有所了解,很好的掌握

ruby1.8

,有使用

ruby on rails

的网站开发经验。还推荐了一些读者本书之前应该读的一些图书。作者推荐的下面几本书都是
很不错的,不过有些还没看。

1

、《

Programming
Ruby

》,第

2

版,之前看类和模块的部分。

2

、《

The
Ruby Programming Language

,

该书对

ruby1.8

ruby1.9

都做了详细的介绍,目前正在读,十分不错的一本书。

3

、《

Best
of 

Ruby Quiz

》,该说选择了

25

道难题,然后给出了解决方案。

4

、《

Agile
Web Development with Rails

》,现在第三版的中文版也有了。几乎是

rails

的入门必读书籍。

5

、《

Rails
Cookbook

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

这些都是一些学习

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

已经准备好请求了。

抱歉!评论已关闭.