`
java-admin
  • 浏览: 1365978 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

Rails,启动-重要

阅读更多

http://www.blogjava.net/sshwsfc/archive/2006/11/20/82401.html

 

为了记录自己看Rails源码的过程,全程记录无废话。

我们看看script/server都干了什么

require File.dirname(__FILE__)  +   ' /../config/boot '
require 
' commands/server '


引用了boot.rb这个文件。看来这个文件是rails启动的入口,来看看怎么回事吧。

unless defined?(RAILS_ROOT)
  root_path 
=  File.join(File.dirname( __FILE__ ),  ' .. ' )

  unless RUBY_PLATFORM 
=~   / mswin32 /
    require 
' pathname '
    root_path 
=  Pathname.new(root_path).cleanpath(true).to_s
  end

  RAILS_ROOT 
=  root_path
end

这一部分定义了RAILS_ROOT这个系统的全局变量,指定了项目的根目录,大家可以在以后华丽的使用了。

下一部分是找到rails,粗略看一下。

   if  File.directory?( " #{RAILS_ROOT}/vendor/rails " )
    require 
" #{RAILS_ROOT}/vendor/rails/railties/lib/initializer "
  
else
    require 
' rubygems '

这里能看到,他先跑到vendor/rails去找rails了,这就是我们为什么能在插件里用rails是原因。如果没有那么gems的干活。
接下来是初始化一下load_path,没什么看的了。boot.rb就这样的吧。

回到script/server的第二行,包含了' commands/server '这个文件,这个文件是什么?Rails的源码里面找吧。我们在Rails的源码里面找到这个文件。

require  ' active_support '
require 
' fileutils '

begin
  require_library_or_gem 
' fcgi '
rescue Exception
  
#  FCGI not available
end

server 
=  case ARGV.first
  when 
" lighttpd "
    ARGV.shift
  when 
" webrick "
    ARGV.shift
  
else
    
if  RUBY_PLATFORM ! ~   / mswin /   &&  !silence_stderr { `lighttpd  - version` }.blank?  &&  defined?(FCGI)
      
" lighttpd "
    
else
      
" webrick "
    end
end

if  server  ==   " webrick "
  puts 
" => Booting WEBrick "
else
  puts 
" => Booting lighttpd (use 'script/server webrick' to force WEBrick) "
end

FileUtils.mkdir_p(
% w( tmp / sessions tmp / cache tmp / sockets ))
require 
" commands/servers/#{server} "
没想到ActiveRecord居然是在这里引用的,这个ActiveRecord里面扩展了很对Ruby的既有类型,所以我们看源码的时候如果发现有不熟悉的方法,就来这里找找,当然,看Rails的API是最好的选择。

从参数一目了然,我们可以传入server的名字,lighttpd和webrick,根据不同的server选择不同的server文件来读取。我们还是看看webrick的吧。

require  ' webrick '
require 
' optparse '

OPTIONS 
=  {
  :port            
=>   3000 ,
  :ip              
=>   " 0.0.0.0 " ,
  :environment     
=>  (ENV[ ' RAILS_ENV ' ||   " development " ).dup,
  :server_root     
=>  File.expand_path(RAILS_ROOT  +   " /public/ " ),
  :server_type     
=>  WEBrick::SimpleServer,
  :charset         
=>   " UTF-8 " ,
  :mime_types      
=>  WEBrick::HTTPUtils::DefaultMimeTypes
}

ARGV.options do 
| opts |
  script_name 
=  File.basename($0)
  opts.banner 
=   " Usage: ruby #{script_name} [options] "

  opts.separator 
""

  opts.on(
" -p " " --port=port " , Integer,
          
" Runs Rails on the specified port. " ,
          
" Default: 3000 " ) {  | v |  OPTIONS[:port]  =  v }
  opts.on(
" -b " " --binding=ip " , String,
          
" Binds Rails to the specified ip. " ,
          
" Default: 0.0.0.0 " ) {  | v |  OPTIONS[:ip]  =  v }
  opts.on(
" -e " " --environment=name " , String,
          
" Specifies the environment to run this server under (test/development/production). " ,
          
" Default: development " ) {  | v |  OPTIONS[:environment]  =  v }
  opts.on(
" -m " " --mime-types=filename " , String,
                  
" Specifies an Apache style mime.types configuration file to be used for mime types " ,
                  
" Default: none " ) {  | mime_types_file |  OPTIONS[:mime_types]  =  WEBrick::HTTPUtils::load_mime_types(mime_types_file) }

  opts.on(
" -d " " --daemon " ,
          
" Make Rails run as a Daemon (only works if fork is available -- meaning on *nix). "
          ) { OPTIONS[:server_type] 
=  WEBrick::Daemon }

  opts.on(
" -c " " --charset=charset " , String,
          
" Set default charset for output. " ,
          
" Default: UTF-8 " ) {  | v |  OPTIONS[:charset]  =  v }

  opts.separator 
""

  opts.on(
" -h " " --help " ,
          
" Show this help message. " ) { puts opts; exit }

  opts.parse!
end

ENV[
" RAILS_ENV " =  OPTIONS[:environment]
RAILS_ENV.replace(OPTIONS[:environment]) 
if  defined?(RAILS_ENV)

require RAILS_ROOT 
+   " /config/environment "
require 
' webrick_server '

OPTIONS[
' working_directory ' =  File.expand_path(RAILS_ROOT)

puts 
" => Rails application started on http://#{OPTIONS[:ip]}:#{OPTIONS[:port]} "
puts 
" => Ctrl-C to shutdown server; call with --help for options "   if  OPTIONS[:server_type]  ==  WEBrick::SimpleServer
DispatchServlet.dispatch(OPTIONS)
本来不想把大段的代码贴上来,但是这里面的内容可能大家都比较关心,涉及到server的启动参数。
  :port            =>   端口 ,
  :ip              
=>  server ip ,
  :environment     
=> 运行环境 ,
  :server_root     
=>  web访问的目录,(很多人问这个怎么改)
  :server_type     
=>  WEBrick::SimpleServer,
  :charset         
=>   " UTF-8 " , 编码
  :mime_types      
=>  WEBrick::HTTPUtils::DefaultMimeTypes

后面的require 引入了两个文件,一个是' webrick_server ',别看,就是他。另外一个是 config/environment ,这个文件是系统的全局配置文件,很重要,我们还是下次看看这个文件去吧。里面还真挺有意思。

(不知道blogjava让不让写ROR的文章,看到有人写了所以放在首页了,如果不妥,我会尽快删除)

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics