首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Rails源码阅览(零)_config/boot

2012-08-27 
Rails源码阅读(零)_config/boot不论是script/console 还是 script/server 都会调用前置的文件:config/boot

Rails源码阅读(零)_config/boot

不论是script/console 还是 script/server 都会调用前置的文件:config/boot

现在分析一下这个文件的源代码,看看究竟做了哪些工作。

?

config/boot.rb阅读:
?看这个模块定义之外的代码就首尾两行,比较直观。Rails模块内容:#启动,做了两件事? class << self? ? def boot!? ? ? unless booted?? ? ? ? preinitialize? ? ? ? pick_boot.run? ? ? end? ? end
# 可以在preinitialize这里写一个patch,做些rails启动之前的操作:? ? def preinitializer_path? ? ? "#{RAILS_ROOT}/config/preinitializer.rb"? ? end
#?pick_boot会找是用系统安装的rails还是固化到vender目录的rails#1 verder的rails加载,3个步骤? class VendorBoot < Boot? ? def load_initializer? ? ? require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"? ? ? Rails::Initializer.run(:install_gem_spec_stubs)? ? ? Rails::GemDependency.add_frozen_gem_path? ? end? end#2 系统安装的rails加载? class GemBoot < Boot? ? def load_initializer? ? ? self.class.load_rubygems #=>require 'rubygems'操作和检查版本? ? ? load_rails_gem #=>gem 'rails', version? ? ? require 'initializer'? ? end
# rails 是要用系统安装的,还是vender目录的,启动的时候仅仅有没有这个目录来决定? ? def vendor_rails?? ? ? File.exist?("#{RAILS_ROOT}/vendor/rails")? ? end
# rails启动之前,如果想做些操作,放在哪里呢? ? def preinitializer_path? ? ? "#{RAILS_ROOT}/config/preinitializer.rb"? ? end
# rails 启动的时候,知道gem版本么? ? ? 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? ? ? private? ? ? ? def read_environment_rb? ? ? ? ? File.read("#{RAILS_ROOT}/config/environment.rb")? ? ? ? end? 看见了么,只能在environment.rb里申明,如果是自己配置的话,不能在例如development.rb里申明
# EVN在很多地方用到,他在哪里定义的呢(我并没有发现在config里面定义的地方)? ? Ok吧,在这里? ? irb;Object.const_get('ENV') ?或者用这个命令ruby -e 'puts Object.const_get("ENV").inspect'
# 一个设计模式,AcstractClass,父类没有必要非要显式申明一个接口给子类java等编译型语言需要这么做,因为编译的时候会检查非编译型语言可以不这么做但申明的话,会更好看些,利于团队合作
?
==>>总结:?require File.expand_path('../../config/boot', ?__FILE__)这个文件执行Rails.boot!,作用:#1 根据有没有vender的rails,确定了使用rails的路径#2 初始化了rails的环境路径(load_paths)(configuration.load_paths + configuration.framework_paths)


+++||+++

?

热点排行