<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    差沙的密碼 -- SSHWSFC's code
    閱讀本Blog請自備塑料袋一只
    posts - 14,  comments - 59,  trackbacks - 0

    為了記錄自己看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的文章,看到有人寫了所以放在首頁了,如果不妥,我會盡快刪除)
    posted on 2006-11-20 23:43 差沙 閱讀(4572) 評論(0)  編輯  收藏 所屬分類: ROR

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    這家伙很懶,但起碼還是寫了一句話。

    <2006年11月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    常用鏈接

    留言簿(8)

    隨筆分類

    隨筆檔案

    文章分類

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 香蕉视频在线观看亚洲| 亚洲午夜激情视频| 亚洲精品免费在线视频| 96免费精品视频在线观看| 久久久久亚洲AV无码专区首| 精品国产污污免费网站| 亚洲欧洲国产日韩精品| 小草在线看片免费人成视久网| 亚洲AV无码专区国产乱码4SE| 日本卡1卡2卡三卡免费| 亚洲AV无码一区二区乱孑伦AS| 无码AV片在线观看免费| 久久亚洲精品成人AV| 波多野结衣在线免费观看| 伊人久久五月丁香综合中文亚洲| 大学生a级毛片免费观看| 小说区亚洲自拍另类| 亚洲午夜未满十八勿入网站2| 久久精品成人免费看| 亚洲黄色在线观看| 成人无遮挡毛片免费看| 添bbb免费观看高清视频| 国产亚洲大尺度无码无码专线| 亚洲一区二区在线免费观看| 亚洲人成网网址在线看| 成人黄18免费视频| 免费一级毛suv好看的国产网站| 亚洲一区二区三区影院| 1000部羞羞禁止免费观看视频| 在线综合亚洲欧洲综合网站| 亚洲男人天堂2020| 久久99热精品免费观看动漫| 狠狠色香婷婷久久亚洲精品| 亚洲国产精品无码久久久久久曰| 国产精品免费AV片在线观看| 亚洲欧美日韩中文高清www777 | 激情五月亚洲色图| 亚洲国产av无码精品| 足恋玩丝袜脚视频免费网站| 色哟哟国产精品免费观看| 久久久久久亚洲AV无码专区|