<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 3.4.5 Ruby ### 3.4.5 Ruby Ruby也是一門通用編程語言,由松本行弘(Yukihiro Matsumoto)發明,并在1996年達到了1.0版。它的主要特征包括開放類定義(open class)、混合器(mixin)和code block等。 對于Ruby語言的學習,我推薦OReilly出版的[《The Ruby Programming Language》](http://shop.oreilly.com/product/9780596516178.do),其作者之一正是松本行弘。 Ruby在服務器端的編程基于Rack,它是Ruby的一個規范,定義了服務器跟應用程序交互的接口,跟Python的WSGI類似。同樣地,這里“服務器”是指接受客戶端(如瀏覽器)HTTP請求的程序,而“應用程序”是指(由你編寫的)響應HTTP請求的程序。Ruby所有的Web編程框架都基于Rack,包括Rails在內。因此了解、掌握它十分必要[1](#fn_1)。 一個Rack的“Hello,world”程序如下: ``` require 'rack' app = proc do |env| ['200', {'Content-Type' => 'text/html'}, ['<p>Hello, Rack!</p>']] end Rack::Handler::WEBrick.run(app, :Port => 8090, :Host => '0.0.0.0') ``` 其中,app就是我們的Rack應用程序。按照Rack規范: - Rack應用程序可以是任何具有“call”方法的對象。在這里它是一個proc。 - 它帶有一個參數,env,包含了與CGI環境變量類似的輸入。 - 它返回一個數組,包含三個元素,分別是HTTP狀態代碼,應答頭(response header)以及消息主體(message body)。 要運行這個程序首先要安裝rack(一個Ruby Gem,包含用于構建Rack程序的輔助工具,相當于Python的wsgiref包): ``` gem install rack ``` 然后在命令行執行(假設程序保存在文件hello.rb中): ``` ruby hello.rb ``` 在瀏覽器中訪問`http://localhost:8090/`,即可看到結果。 與Python WSGI相同,Rack也支持**中間件(middleware)**。一個簡單的例子如下(包含三個文件,文件名在首行注釋): ``` # app.rb class App def call(env) ['200', {'Content-Type' => 'text/html'}, ['<p>Hello, Rack!</p>']] end end ``` ``` # middleware.rb class Middleware def initialize(app) @app = app end def call(env) status, headers, body = @app.call(env) body.each {|line| line.upcase! } return [status, headers, body] end end ``` ``` # config.ru require './app' require './middleware' use Middleware run App.new ``` 我們已經說過“Rack應用程序可以是任何具有“call”方法的對象”。在這個例子中,它是一個App類的對象。 中間件也是一個Rack應用程序,但是它“含有”另一個Rack應用程序。Rack服務器調用中間件,傳遞給它一個env參數,并接受它返回的狀態代碼、應答頭部和消息主體。這樣,中間件可以檢查、修改env,并把它傳遞給“內含”的Rack應用程序。它還可以檢查、修改內含的Rack應用程序的返回結果,并返回給上級服務器(也可能是另一個中間件!)。在這個例子中,我們把內部App返回的消息主體字符都轉化成大寫。 雖然簡單,但這是一個產品級的配置:我們使用了config.ru來組裝我們的Rack應用程序和中間件。config.ru是Rack應用程序的標準配置:它指定了Rack應用程序(通過`run`)及中間件(通過`use`),把它們組裝在一起,形成了一個完整的Rack應用。 要運行這個應用程序,在命令行上執行: ``` rackup -p 8090 -o 0.0.0.0 ``` 然后就可以在瀏覽器中通過`http://localhost:8090/`訪問它。 關于Rack的更多信息,可參考:<https://github.com/rack/rack>。 關于Ruby的Web編程框架,除了著名的[Ruby on Rails](http://rubyonrails.org/),還有[Sinatra](http://www.sinatrarb.com/)(一個小型輕量級框架)等,它們都基于Rack。 > 1. 限于篇幅,這里對Rack只做了簡單的介紹。若想進一步了解Rack,請看我的博文[Ruby Rack及其應用(上)](http://huiming.io/2016/11/10/ruby-rack.html)。[?](#reffn_1 "Jump back to footnote [1] in the text.")
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看