Kapitola 44. Rack

Attributy: id="Rack"

Odkazy:

Ukázky kódu:

Rack je konvence.

Máme li ruby object, který má metodu call

app.call(env)

a tato metoda vrací pole se třemi prvky

[200, {'Content-Type' => 'text/plain'}, 'Hello World!']

je možné ento objekt propojit s Rack

require 'thin'
Rack::Handler::Thin.run(app, :Port => 4000)

A tímto propojením vznikne wbová aplikace.

app = Proc.new do |env|
    [200, { 'Content-Type' => 'text/plain' },
     'Hello World!']
end

require 'rubygems'
require 'thin'
Rack::Handler::Thin.run(app, :Port => 4000)

Pole které metoda call vrací má tři prvky jenž mají tento váznam.

[200, {'Content-Type' => 'text/plain'}, "Hello #{@name}"]

	[ 200,                               # HTTP status kód
  {'Content-Type' => 'text/plain'},  # Hash obsahující HTTP hlavičky které chceme posílat
  "Hello #{@name}"                   # tělo odpovědi, nemusí to být řetězec
]

Tělo odpovědi může být objekt který odpovídá na zprávu :each (respond_to?(:each)). Příklad použití:

file = File('myfile.xml')
[200, {'Content-Type' => 'application/xml'}, file]
class StreamingFile
    def initialize(file)
        @file = file
    end

    def length
        @File.size(@file)
    end

    def last_modified
        File.mtime(@file).tfc822
    end

    def each
        File.open(@file, "rb") do |file|
            while part = file.read(8192)
                yield part
            end
        File.delete(@file)
    end
end
Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .