`
fantaxy025025
  • 浏览: 1309059 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

动手写rails(一)_Rack标准和HttpServer之WEBrick

 
阅读更多

 

无论如何,最终的结果是要启动一个server来接受请求,并返回结果。

ruby世界里,rack和java的servlet一样,是个标准。

 

RACK

Rack描述:

    provides a minimal interface between webservers supporting Ruby and Ruby frameworks.

优点:

    Rack provides a minimal, modular and adaptable interface for developing web applications in Ruby. By wrapping HTTP requests and responses in the simplest way possible, it unifies and distills the API for web servers, web frameworks, and software in between (the so-called middleware) into a single method call.

接口规范:

http://rack.rubyforge.org/doc/SPEC.html

使用的例子:

http://rack.rubyforge.org/doc/README.html 注意看 “Quick start”

 

代码例子:

#1 直接使用

 

require 'rubygems'
gem 'rack', '1.0.1'
require 'rack'
require 'rack/showexceptions'

class HelloWorld
  def call(env)
    [200, {"Content-Type" => "text/html"}, "Hello Rack!"]
  end
end

#RUN_1
server = Rack::Handler::WEBrick
server.run HelloWorld.new, :Port => 9292

 

#2 使用Rack::Builder,可以往过滤栈中加入过滤器

#RUN_2
app = Rack::Builder.new {
   use Rack::CommonLogger
   use Rack::ShowExceptions
   map "/" do
     #use Rack::Lint
     run HelloWorld.new
   end
}
server = Rack::Handler::WEBrick
server.run app, :Port => 9292

#3 Rack::Builder返回值还可以被嵌套(或者可以用to_app函数)

 

#RUN_3
inner_app = Rack::Builder.new {
   use Rack::CommonLogger
   use Rack::ShowExceptions
   map "/" do
     run HelloWorld.new
   end
}
app = Rack::Builder.new {
   use Rack::CommonLogger
   use Rack::ShowExceptions
   map "/" do
     run inner_app
   end
}
server = Rack::Handler::WEBrick
server.run app, :Port => 9292

 

Rack的优点利用:

map路径到不同的rack_app

rack stack的过滤

 

rack的相关资料和介绍:

rack官方:http://rack.rubyforge.org/

rack规范:http://rack.rubyforge.org/doc/SPEC.html

rack相关情况:http://rack.rubyforge.org/doc/README.html

Rack::Builder的api:http://rack.rubyforge.org/doc/Rack/Builder.html

rails官方对rack的使用:http://guides.rubyonrails.org/rails_on_rack.html

37signals的核心人员也就是rails的core-team-member对rack的introduction,可能直接对应rails的源码:

http://m.onkey.org/ruby-on-rack-1-hello-rack

http://m.onkey.org/ruby-on-rack-2-the-builder

这是一个实际的应用,rails和sinatra共存。原理:不同的map路径,map到不同的rack-server

http://m.onkey.org/rails-meets-sinatra

还有一篇中文的,总结的很不错:

http://hi.baidu.com/hlxwell/blog/item/614710a87dcaaeb9cb130c20.html

 

 

WEBrick

servlet有了,总要有服务器环境。

ruby默认的lib里自带了WEBrick,一个web-server,实现了http协议,CGI等

WEBrick遵循rack的标准,所以接收到请求后,可以走rack的stack。

WEBrick可以单独作为web-server。

例子:

 

require 'webrick'

root = File.expand_path 'index.html'
server = WEBrick::HTTPServer.new :Port => 8000, :DocumentRoot => root

trap 'INT' do server.shutdown end
server.start

index.html

<html>
<head>
    <title>fantaxy025025</title>
</head>
<doby>hello world!</doby>
</html>

 

关于WEBrick,rails里基本不会单独使用,但可以作为单独的web-server使用。

 

相关文档:

wikipedia.org:http://en.wikipedia.org/wiki/WEBrick

自带的文档:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/webrick/rdoc/WEBrick.html

详细文档:居然很多页面也被枪了!

http://microjet.ath.cx/webrickguide/html/html_webrick.html

官方文档:http://segment7.net/projects/ruby/WEBrick/ 

一个中文的介绍,不错:

http://hi.baidu.com/gsxu/blog/item/fcf9172abdf3a8385243c13d.html/cmtid/0c719e3ef4550ff5838b137c

 

==>>总结<<==

有了上面这些,基本上rails启动了什么,大概底下会做些什么大动作,基本就搞定了。

启动的代码,基本也能看懂了。

别去看启动rails的细节,只要知道:

ActionController::Dispatcher.new is the primary Rack application object of a Rails application. Any Rack compliant web server should be usingActionController::Dispatcher.new object to serve a Rails application.

 

 

            ||

           |  |

          |    |

====结束====

===           ===

==                ==

=                     =

|                       |

 

分享到:
评论

相关推荐

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板.zip

    rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板 Rails 应用编辑器 Rails 应用程序编辑器 gem 安装一个 命令行 工具来从"食谱"的Collection 组装 Rails 应用程序。"你可以使用 rails_...

    inspinia admin - v2.5 Rails_Full_Version

    "inspinia admin - v2.5 Rails_Full_Version" 是一个基于Rails框架构建的后台管理系统的完整版本。这个系统采用流行的Inspinia Admin模板,提供了丰富的功能和自定义选项,旨在帮助开发者快速构建高效、现代且用户...

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器.zip

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器 Rails 语义记录器 语义记录器用语义记录器替代 Rails 缺省记录器。http://github.com/rocketjob/rails_semantic_logger文档有关完整文档...

    Complex Rails system_Rails_优化_

    Rails,作为一个强大的Web开发框架,虽然提供了丰富的功能和便利性,但如果不进行适当的优化,可能会导致应用程序响应时间变慢,资源消耗过大,甚至影响用户体验。本篇文章将深入探讨如何针对Rails系统的复杂架构...

    InspiniaAdmin 2.6.1 Rails_Full_Version

    在Rails_Full_Version压缩包中,包含了完整的源代码和必要的资源文件,开发者可以通过解压并导入到Rails项目中,按照官方文档进行配置和定制。同时,这个版本可能还包含了升级记录、更改日志和可能的bug修复,以保证...

    agile_web_development_with_rails_3rd_edition.9994652073.pdf

    《敏捷Web开发与Rails》第三版是一本深入探讨Ruby on Rails框架在敏捷软件开发方法论下的应用指南。本书由多位知名作者共同编写,包括Sam Ruby、Dave Thomas、David Heinemeier Hansson等,他们都是在Ruby社区内享有...

    weixin_rails_middleware, 微信集成 ruby weixin_rails_middleware for integration weixin..zip

    `weixin_rails_middleware` 是一个开源的 Ruby 框架中间件,设计用于帮助开发者轻松地在 Rails 应用程序中集成微信服务。这个中间件提供了与微信API交互的功能,包括验证微信服务器的请求、处理用户消息、以及发送...

    rails_admin_acts_as_list:rails_admin插件以对记录进行排序

    介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...

    Ruby on Rails Guides_ A Guide to Testing Rails Applications.pdf

    Rails框架设计之初就充分考虑了测试的需求,它在后台自动生成骨架测试代码,当你创建模型和控制器时,测试代码便已就绪。通过运行这些测试,你可以确保代码即使在大规模重构后仍保持预期的功能性。此外,Rails测试...

    wdi_3_rack_rails_lite:使用 Rack 创建 Rails 精简版

    我们将从 Ruby、Rack 和 ActiveSupport 构建一个应用程序。 本课的目的是从内部展示 Rails 是如何工作的。 这将逐步构建一些 Rails 组件的精简版。 它会: 创建一个类似Rails 的初始化过程。 使用 Rails 目录...

    Webrick rails外部电脑访问慢

    在使用Webrick作为Rails服务器的过程中,很多开发者遇到了一个常见的问题:当尝试从外部电脑访问Webrick服务器时,访问速度变得异常缓慢。这给开发和测试带来了很大的不便。 #### 问题分析 在Webrick中,默认情况...

    Api-rails5_api_tutorial.zip

    Api-rails5_api_tutorial.zip,了解如何在michael hartl的rails 5教程上构建一个现代api立即在rails应用程序中构建一个api!(Rails 5版本),一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web...

    RestFul_Rails_Dev_pdf_v_0.1.zip

    本资料“RestFul_Rails_Dev_pdf_v_0.1.zip”包含了《RESTful Rails Development》的翻译版,将深入探讨如何在Rails中实现RESTful的设计模式。 首先,RESTful设计的核心概念是资源(Resources)。在Rails中,资源...

    inspinia admin - v2.5 Rails_Seed_Project

    本文将详细探讨其在Rails框架下的种子项目(Rails_Seed_Project),旨在帮助开发者更好地理解和运用这一强大的工具。 首先,我们来了解一下“Inspinia Admin”。这是一款基于Bootstrap 3构建的响应式后台模板,提供...

    rails_best_practices:Rails项目的代码度量工具

    rails_best_practices ...默认情况下,rails_best_practices将解析vendor , spec , test和features目录中的代码。 排除目录 要排除目录,只需使用-e或--exclude调用: rails_best_practices -e "db/migrate

    InspiniaAdmin 2.5 Rails_Seed_Project

    在这个Rails_Seed_Project中,开发者可以找到一个典型的Rails应用结构,包括Gemfile、config.ru、database.yml等核心配置文件,以及models、controllers、views和assets等目录,它们分别对应着业务逻辑、数据操作、...

    inspinia_admin_v2.5_Rails_Full_Version

    该模板包含的文件列表“inspinia_admin_v2.5_Rails_Full_Version”很可能包括以下组成部分: 1. **静态资源**:CSS样式文件、JavaScript脚本和图像资源。这些文件用于构建用户界面,包括响应式布局、图表、表单元素...

    Ruby on Rails Guides_ A Guide to Active Record Associations.pdf

    Ruby on Rails Guides_ A Guide to Active Record Associations.pdf

Global site tag (gtag.js) - Google Analytics