首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Rails,起步-重要

2012-09-19 
Rails,启动-重要http://www.blogjava.net/sshwsfc/archive/2006/11/20/82401.html?require?File.dirname(_

Rails,启动-重要

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

?

require?File.dirname(__FILE__)?+?'/../config/boot'
Rails,起步-重要require?'commands/server'


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

Rails,起步-重要unless?defined?(RAILS_ROOT)
Rails,起步-重要??root_path?=?File.join(File.dirname(__FILE__),?'..')
Rails,起步-重要
Rails,起步-重要??unless?RUBY_PLATFORM?=~?/mswin32/
Rails,起步-重要????require?'pathname'
Rails,起步-重要????root_path?=?Pathname.new(root_path).cleanpath(true).to_s
Rails,起步-重要??end
Rails,起步-重要
Rails,起步-重要??RAILS_ROOT?=?root_path
Rails,起步-重要end

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

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

Rails,起步-重要??if?File.directory?("#{RAILS_ROOT}/vendor/rails")
Rails,起步-重要????require?"#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
Rails,起步-重要??else
Rails,起步-重要????require?'rubygems'

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

回到script/server的第二行,包含了'commands/server'这个文件,这个文件是什么?Rails的源码里面找吧。我们在Rails的源码里面找到这个文件。
Rails,起步-重要require?'active_support'
Rails,起步-重要require?'fileutils'
Rails,起步-重要
Rails,起步-重要begin
Rails,起步-重要??require_library_or_gem?'fcgi'
Rails,起步-重要rescue?Exception
Rails,起步-重要??#?FCGI?not?available
Rails,起步-重要end
Rails,起步-重要
Rails,起步-重要server?=?case?ARGV.first
Rails,起步-重要??when?"lighttpd"
Rails,起步-重要????ARGV.shift
Rails,起步-重要??when?"webrick"
Rails,起步-重要????ARGV.shift
Rails,起步-重要??else
Rails,起步-重要????if?RUBY_PLATFORM?!~?/mswin/?&&?!silence_stderr?{?`lighttpd?-version`?}.blank??&&?defined?(FCGI)
Rails,起步-重要??????"lighttpd"
Rails,起步-重要????else
Rails,起步-重要??????"webrick"
Rails,起步-重要????end
Rails,起步-重要end
Rails,起步-重要
Rails,起步-重要if?server?==?"webrick"
Rails,起步-重要??puts?"=>?Booting?WEBrickRails,起步-重要"
Rails,起步-重要else
Rails,起步-重要??puts?"=>?Booting?lighttpd?(use?'script/server?webrick'?to?force?WEBrick)"
Rails,起步-重要end
Rails,起步-重要
Rails,起步-重要FileUtils.mkdir_p(%w(?tmp/sessions?tmp/cache?tmp/sockets?))
Rails,起步-重要require?"commands/servers/#{server}"
Rails,起步-重要没想到ActiveRecord居然是在这里引用的,这个ActiveRecord里面扩展了很对Ruby的既有类型,所以我们看源码的时候如果发现有不熟悉的方法,就来这里找找,当然,看Rails的API是最好的选择。

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

Rails,起步-重要require?'webrick'
Rails,起步-重要require?'optparse'
Rails,起步-重要
Rails,起步-重要OPTIONS?=?{
Rails,起步-重要??:port????????????=>?3000,
Rails,起步-重要??:ip??????????????=>?"0.0.0.0",
Rails,起步-重要??:environment?????=>?(ENV['RAILS_ENV']?||?"development").dup,
Rails,起步-重要??:server_root?????=>?File.expand_path(RAILS_ROOT?+?"/public/"),
Rails,起步-重要??:server_type?????=>?WEBrick::SimpleServer,
Rails,起步-重要??:charset?????????=>?"UTF-8",
Rails,起步-重要??:mime_types??????=>?WEBrick::HTTPUtils::DefaultMimeTypes
Rails,起步-重要}
Rails,起步-重要
Rails,起步-重要ARGV.options?do?|opts|
Rails,起步-重要??script_name?=?File.basename($0)
Rails,起步-重要??opts.banner?=?"Usage:?ruby?#{script_name}?[options]"
Rails,起步-重要
Rails,起步-重要??opts.separator?""
Rails,起步-重要
Rails,起步-重要??opts.on("-p",?"--port=port",?Integer,
Rails,起步-重要??????????"Runs?Rails?on?the?specified?port.",
Rails,起步-重要??????????"Default:?3000")?{?|v|?OPTIONS[:port]?=?v?}
Rails,起步-重要??opts.on("-b",?"--binding=ip",?String,
Rails,起步-重要??????????"Binds?Rails?to?the?specified?ip.",
Rails,起步-重要??????????"Default:?0.0.0.0")?{?|v|?OPTIONS[:ip]?=?v?}
Rails,起步-重要??opts.on("-e",?"--environment=name",?String,
Rails,起步-重要??????????"Specifies?the?environment?to?run?this?server?under?(test/development/production).",
Rails,起步-重要??????????"Default:?development")?{?|v|?OPTIONS[:environment]?=?v?}
Rails,起步-重要??opts.on("-m",?"--mime-types=filename",?String,
Rails,起步-重要??????????????????"Specifies?an?Apache?style?mime.types?configuration?file?to?be?used?for?mime?types",
Rails,起步-重要??????????????????"Default:?none")?{?|mime_types_file|?OPTIONS[:mime_types]?=?WEBrick::HTTPUtils::load_mime_types(mime_types_file)?}
Rails,起步-重要
Rails,起步-重要??opts.on("-d",?"--daemon",
Rails,起步-重要??????????"Make?Rails?run?as?a?Daemon?(only?works?if?fork?is?available?--?meaning?on?*nix)."
Rails,起步-重要??????????)?{?OPTIONS[:server_type]?=?WEBrick::Daemon?}
Rails,起步-重要
Rails,起步-重要??opts.on("-c",?"--charset=charset",?String,
Rails,起步-重要??????????"Set?default?charset?for?output.",
Rails,起步-重要??????????"Default:?UTF-8")?{?|v|?OPTIONS[:charset]?=?v?}
Rails,起步-重要
Rails,起步-重要??opts.separator?""
Rails,起步-重要
Rails,起步-重要??opts.on("-h",?"--help",
Rails,起步-重要??????????"Show?this?help?message.")?{?puts?opts;?exit?}
Rails,起步-重要
Rails,起步-重要??opts.parse!
Rails,起步-重要end
Rails,起步-重要
Rails,起步-重要ENV["RAILS_ENV"]?=?OPTIONS[:environment]
Rails,起步-重要RAILS_ENV.replace(OPTIONS[:environment])?if?defined?(RAILS_ENV)
Rails,起步-重要
Rails,起步-重要require?RAILS_ROOT?+?"/config/environment"
Rails,起步-重要require?'webrick_server'
Rails,起步-重要
Rails,起步-重要OPTIONS['working_directory']?=?File.expand_path(RAILS_ROOT)
Rails,起步-重要
Rails,起步-重要puts?"=>?Rails?application?started?on?http://#{OPTIONS[:ip]}:#{OPTIONS[:port]}"
Rails,起步-重要puts?"=>?Ctrl-C?to?shutdown?server;?call?with?--help?for?options"?if?OPTIONS[:server_type]?==?WEBrick::SimpleServer
Rails,起步-重要DispatchServlet.dispatch(OPTIONS)
Rails,起步-重要本来不想把大段的代码贴上来,但是这里面的内容可能大家都比较关心,涉及到server的启动参数。
Rails,起步-重要??:port????????????=>?端口,
Rails,起步-重要??:ip??????????????=>?server ip,
Rails,起步-重要??:environment?????=>运行环境,
Rails,起步-重要??:server_root?????=>?web访问的目录,(很多人问这个怎么改)
Rails,起步-重要??:server_type?????=>?WEBrick::SimpleServer,
Rails,起步-重要??:charset?????????=>?"UTF-8", 编码
Rails,起步-重要??:mime_types??????=>?WEBrick::HTTPUtils::DefaultMimeTypes

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

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

?

?

热点排行
Bad Request.