<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)

    隨筆分類

    隨筆檔案

    文章分類

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 中文字幕免费高清视频| 亚洲狠狠ady亚洲精品大秀| 91情侣在线精品国产免费| 又黄又大的激情视频在线观看免费视频社区在线 | 可以免费看黄的网站| 在线观看免费播放av片| 香蕉视频在线观看免费| 一本色道久久综合亚洲精品蜜桃冫| 亚洲动漫精品无码av天堂| 亚洲精品成a人在线观看| 免费看大黄高清网站视频在线| 最近免费中文字幕mv电影| 中文字幕免费观看视频| 又粗又长又爽又长黄免费视频| 亚洲乱妇熟女爽到高潮的片| 亚洲日本在线播放| 7777久久亚洲中文字幕蜜桃| 亚洲成色WWW久久网站| 国产精品亚洲产品一区二区三区| 免费国产成人高清视频网站| 四虎成人免费观看在线网址| 在人线av无码免费高潮喷水| 最近免费字幕中文大全视频| 99热在线免费播放| 四虎成人精品永久免费AV| 成人免费区一区二区三区| 三级黄色在线免费观看| 久久免费视频一区| 丁香花在线观看免费观看图片| 精品乱子伦一区二区三区高清免费播放 | 亚洲va在线va天堂va不卡下载| 亚洲色婷婷一区二区三区| 中文字幕一精品亚洲无线一区| 国产a v无码专区亚洲av| 中文字幕无码精品亚洲资源网| 亚洲精品视频免费观看| 国产亚洲精品AA片在线观看不加载| AV在线亚洲男人的天堂| 久久国产亚洲精品麻豆| 久久久久久亚洲Av无码精品专口| 亚洲尹人九九大色香蕉网站|