<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這個系統(tǒng)的全局變量,指定了項目的根目錄,大家可以在以后華麗的使用了。

    下一部分是找到rails,粗略看一下。
    ??if?File.directory?("#{RAILS_ROOT}/vendor/rails")
    ????require?
    "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
    ??
    else
    ????require?
    'rubygems'
    這里能看到,他先跑到vendor/rails去找rails了,這就是我們?yōu)槭裁茨茉诓寮镉胷ails是原因。如果沒有那么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里面擴(kuò)展了很對Ruby的既有類型,所以我們看源碼的時候如果發(fā)現(xiàn)有不熟悉的方法,就來這里找找,當(dāng)然,看Rails的API是最好的選擇。

    從參數(shù)一目了然,我們可以傳入server的名字,lighttpd和webrick,根據(jù)不同的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)
    本來不想把大段的代碼貼上來,但是這里面的內(nèi)容可能大家都比較關(guān)心,涉及到server的啟動參數(shù)。
    ??:port????????????=>?端口,
    ??:ip??????????????
    =>?server ip,
    ??:environment?????
    =>運行環(huán)境,
    ??:server_root?????
    =>?web訪問的目錄,(很多人問這個怎么改)
    ??:server_type?????
    =>?WEBrick::SimpleServer,
    ??:charset?????????
    =>?"UTF-8", 編碼
    ??:mime_types??????
    =>?WEBrick::HTTPUtils::DefaultMimeTypes

    后面的require?引入了兩個文件,一個是'webrick_server',別看,就是他。另外一個是config/environment,這個文件是系統(tǒng)的全局配置文件,很重要,我們還是下次看看這個文件去吧。里面還真挺有意思。

    (不知道blogjava讓不讓寫ROR的文章,看到有人寫了所以放在首頁了,如果不妥,我會盡快刪除)
    posted on 2006-11-20 23:43 差沙 閱讀(4572) 評論(0)  編輯  收藏 所屬分類: ROR

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


    網(wǎng)站導(dǎo)航:
     
    這家伙很懶,但起碼還是寫了一句話。

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

    常用鏈接

    留言簿(8)

    隨筆分類

    隨筆檔案

    文章分類

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产美女在线观看| 亚洲欧美在线x视频| 国产美女在线精品免费观看| 亚洲色大成网站www永久网站| 国产精品亚洲mnbav网站 | 亚洲网站视频在线观看| 成人毛片18女人毛片免费视频未 | 亚洲va成无码人在线观看| 免费人成无码大片在线观看| 大地影院MV在线观看视频免费 | 亚洲精品国产电影| 日本成年免费网站| 久久99精品免费一区二区| 亚洲一区二区三区亚瑟| 久久久久亚洲AV成人网人人软件| 亚洲一级毛片免费观看| 一级成人a做片免费| 亚洲国产区男人本色在线观看| 伊人久久精品亚洲午夜| 成年性生交大片免费看| 免费人成在线观看网站| 国产亚洲高清在线精品不卡| 亚洲高清不卡视频| 国产精品亚洲二区在线观看 | 二级毛片免费观看全程| 日本亚洲精品色婷婷在线影院| 国产亚洲人成网站在线观看不卡| 女人18一级毛片免费观看| 精品无码无人网站免费视频| 色老头综合免费视频| 亚洲色欲色欲www在线播放| 91在线亚洲精品专区| 亚洲国产美女精品久久久久∴| 日本免费高清一本视频| 99久久久精品免费观看国产| 中文字幕无码免费久久| 免费人成网站永久| 亚洲av永久中文无码精品综合| 亚洲无限乱码一二三四区| 亚洲AV午夜成人影院老师机影院| 久久久久亚洲AV综合波多野结衣|