`
java-admin
  • 浏览: 1381552 次
  • 性别: 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的文章,看到有人写了所以放在首页了,如果不妥,我会尽快删除)

 

 

分享到:
评论

相关推荐

    rails-prelaunch-signup, web启动预启动站点的Rails 3.2应用程序示例.zip

    rails-prelaunch-signup, web启动预启动站点的Rails 3.2应用程序示例 Rails 应用程序用于启动预启动注册站点Rails...Rails 预启动注册应用程序插件项目页最重要的是,有一个详细的教程来展示它是如何构建的。你可以在几

    rails-4.2.0-gems

    Rails 4.2.0 是一个非常重要的版本,在Ruby on Rails框架的历史中占据了显著位置。这个版本引入了许多新特性、改进和性能优化,为开发者提供了更高效和灵活的开发环境。Ruby 4.2.0是这个框架所依赖的编程语言的一个...

    rails-beginner-s-guide

    Rails的表单构建器简化了表单创建过程,渲染器则用于将数据渲染为不同的视图格式,而railties则是Rails框架的核心部分,用于初始化、配置和启动Rails应用。 《Rails初学者指南》为初学者提供了一个全面、系统的学习...

    rails-development-environment-master.rar

    压缩包中的"rails-development-environment-master.zip"可能是整个项目文件夹,包括`app`(应用代码)、`config`(配置文件)、`db`(数据库相关)、`bin`(可执行脚本)、`lib`(自定义库)、`test`(测试)、`...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:读者已经具备一定的Ruby编程基础,并对Web开发有一定的了解。 #### 二、什么是Rails...

    rails-builds-test-源码.rar

    9. **初始化文件(Initializers)**:`config/initializers`目录下的文件在Rails启动时执行,常用来设置全局配置或加载自定义代码。 10. **Scaffolding**:Rails提供了一种快速创建CRUD(创建、读取、更新、删除)...

    Ruby On Rails-Cheatsheet

    本篇文章将从给定的文件中提炼出关于Ruby on Rails的重要知识点,主要包括命令、URL映射、命名规范、ERB标签、链接创建、数据库配置及查询、模型之间的关系等方面。 #### Ruby on Rails 命令 - **更新 Rails** - ...

    Obie Fernandez, Kevin Faustino, Vitaly Kushner - The Rails 4 Way - 2014

    - **启动与应用设置**: 深入探讨Rails应用程序启动过程中的关键设置项,如`config/application.rb`中的配置选项。 - **开发模式**: 讨论了开发环境下Rails的行为特性,比如自动代码重载等。 - **测试模式**: 分析了...

    rails-asyncweb-开源

    开源的特性使得它成为开发者社区中的一个重要组成部分,为 Ruby on Rails 应用提供了更多选择和灵活性。对于那些寻求在 JVM 上运行高性能 Rails 应用的开发者来说,Rails-Asyncweb 是一个值得考虑的优秀解决方案。

    casino-sso-client-rails4-example:与示例 CASino 服务器(Rails4 应用程序)一起使用的简单客户端应用程序

    2. **Zeus**:Zeus是一个Ruby开发的代码加速器,它可以在不重启Rails服务器的情况下加快应用的启动速度。在项目中,可以通过运行`zeus start`来启动Zeus服务器,提高开发效率。使用Zeus可以减少加载和执行代码的时间...

    rails-puma-ssl:在开发中开始使用SSL的简便方法

    在Rails应用中启用SSL支持是非常重要的,特别是在处理敏感用户数据或进行在线交易的网站上。SSL证书是验证网站身份并启用HTTPS(HTTP over SSL/TLS)的必要组件,它提供了对用户浏览器的可见信任标志,例如绿色地址...

    Rails 中mongrel的安装

    安装完成后,可以通过`mongrel_rails`命令来启动Rails应用。在Rails项目的根目录下,执行: ```bash mongrel_rails start -p ``` 这里的`<port>`是你要监听的端口号,例如`3000`。 ** 配置Mongrel ** Mongrel...

    rails 项目起步示例

    2. **bin**:存放可执行文件,如`rails`脚本,用于启动服务器、运行测试等。 3. **config**:配置文件的集合,包括数据库连接、路由设置、应用环境等。 4. **db**:数据库相关的文件,如迁移(migrations)用于...

    centOS Rails3环境搭建

    这一步骤对于后续的Ruby和Rails安装至关重要。 ##### 1. 安装Node.js Node.js在某些Rails应用中是必需的,尤其是在使用某些前端工具如Webpacker时。可以通过以下命令进行安装: ```bash # 安装依赖库 yum install...

    rails-garden-manager

    通过解压 "rails-garden-manager-master" 并运行 `bundle install` 来安装依赖,然后执行 `rails server` 启动本地服务器,就可以在浏览器中预览并交互这个花园管理应用了。如果你熟悉 Rails,那么这个项目将是一个...

    The Rails 4 Way

    - **启动和应用设置**:这部分介绍如何配置Rails项目的启动过程以及如何设置各种环境变量,包括开发、测试和生产环境的差异配置。 - **不同模式下的配置**: - **开发模式**:通常包含更多的调试信息和详细的错误...

    Ruby on Rails心得

    - **命令**:进入项目根目录后,运行 `rails server` 或 `bundle exec rails server` 来启动 Rails 自带的 Web 服务器。默认情况下,服务器运行在 `http://localhost:3000` 地址上。 **3. 访问 Web 页面** - **...

    react-rails-example

    一旦数据库准备就绪,启动Rails服务器至关重要。输入`bin/rails server`(或者简写为`bin/rails s`)启动本地开发服务器,这样你就可以在浏览器中预览和测试应用了。 在React-Rails的设置中,你需要在Rails的配置...

    Ruby on Rails 指南 v5.0.1 中文版

    - **启动并运行起来**:详细讲解如何启动Rails服务器以及如何访问开发中的应用程序。 - **添加第二个模型**:介绍如何添加新的模型到项目中,并演示如何与数据库交互。 - **重构**:强调代码重构的重要性,并给出...

    capistrano-rails-console:Capistrano插件,它添加了远程Rails控制台和dbconsole

    `capistrano-rails-console`插件是Capistrano生态系统中的一个重要组成部分,它增强了开发者对远程Rails环境的管理能力。通过提供远程Rails控制台和数据库控制台,它极大地简化了远程操作和调试过程,提高了开发者的...

Global site tag (gtag.js) - Google Analytics