rails启动过程(一)代码流程概述

前言

Rails 3中出现了很多新的名词,如Railtie,engine,application等,这些都和Rails的启动过程及gem的开发密切相关,由于好奇,想尝试分析整个Rails 3的启动过程,给自己一个交代。


从我们在工程目录下输入:

 rails s 

开始。首先看看这个命令中的rails是什么:

$ which rails

/home/tomwang/.rvm/gems/ruby-1.9.3-p194@rails323/bin/rails


这个启动脚本如下:

#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'railties' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/
    version = $1
    ARGV.shift
  end
end

gem 'railties', version
load Gem.bin_path('railties', 'rails', version)
这个文件主要做了两件事:
  • 导入railties这个gem,这是rails 3中的核心概念,后面还会对它进行更详尽的分析
  • load railties这个gem下的另一个rails脚本:/home/tomwang/.rvm/gems/ruby-1.9.3-p194@rails323/gems/railties-3.2.3/bin/rails
它的内容如下:
#!/usr/bin/env ruby

if File.exists?(File.join(File.expand_path('../../..', __FILE__), '.git'))
  railties_path = File.expand_path('../../lib', __FILE__)
  $:.unshift(railties_path)
end
require "rails/cli"
这个rails主要是require了
"railties-3.2.3/lib/rails/cli.rb "

这个文件,它的内容如下:

require 'rbconfig'
require 'rails/script_rails_loader'
  
# If we are inside a Rails application this method performs an exec and thus
# the rest of this script is not run.
Rails::ScriptRailsLoader.exec_script_rails!

它最后一行执行的函数如下:

module Rails
  module ScriptRailsLoader
    RUBY = File.join(*RbConfig::CONFIG.values_at("bindir", "ruby_install_name")) + RbConfig::CONFIG["EXEEXT"]
    SCRIPT_RAILS = File.join('script', 'rails
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值