Rack, a Ruby Webserver Interface
Original authorLeah Neukirchen
DevelopersJames Tucker, Josh Peek, José Valim, Michael Fellinger, Aaron Patterson, Santiago Pastorino, Konstantin Haase
Stable release
3.0.2 / December 5, 2022; 3 years ago (2022-12-05)[1]
Operating systemCross-platform
TypeMiddleware
LicenseMIT License
Websiterack.github.io Edit this on Wikidata
Repository

Rack is a modular interface between web servers and web applications developed in the Ruby programming language. With Rack, application programming interfaces (APIs) for web frameworks and middleware are wrapped into a single method call handling HTTP requests and responses.

Rack is used by many Ruby web frameworks and libraries, such as Ruby on Rails and Sinatra. It is available as a Ruby Gem. Many Ruby applications are called "rack-compliant".[2]

Rack has inspired similar frameworks in JavaScript[3] (jack.js), Clojure,[4] Perl (Plack), Common Lisp (Clack),[5] and .NET (OWIN).[6]

Overview

edit

The characteristics of a Rack application is that the application object responds to the call method. The call method takes in the environment object as argument and returns the Rack response object.

Environment

edit

Source:[7]

The environment that is taken as argument by the call method refers to an object that has:
a) Information on the HTTP Request

This includes the information like:

  • HTTP request method
  • The URL information(information that would direct to the application, information that directs to the actual location in the application, query string)
  • Server information like the server name and server port
  • The HTTP metavariables that are received from the client

b) Rack specific information

This includes the information like

  • The version of the Rack application that is running
  • The URL scheme that is used, that is, if the request that is received is http or https.
  • The raw HTTP data.
  • A Ruby object for reporting errors.
  • Information like if the application object is simultaneously invoked from another thread or process.
  • Information on the server expectations and capabilities (capability of the server for connection hijacking).

In case the application is being used as a middleware, the environment can have objects that would provide session information, logging capabilities, information on the size of the data that can be used for read and writes etc. In addition to these, the server can store their own data in the environment.

Rack response

edit

Source:[7]

The rack server object returns a response which contains three parts: the status, headers and the body.

  • The status contains the HTTP status codes such as 200, 404.
  • The header contains the response for each and gives the key-value pairs. The keys have to be strings.
  • Body contains the final data which is sent by the server to the requester.

Rack::Response provides a convenient interface to create a Rack response. The class Rack::Response is defined in lib/rack/response.rb. To use the Response class, instantiate it from the middleware layer down the stack. It can be used to modify the cookies.

Middleware in racks

edit

Source:[7]

Rack makes it easy to add a chain of middleware components between the application and the web server. Multiple middleware components can be used in the rack which modifies the request/response before handing it over to the next component. This is called middleware stack.

The Rack server adds multiple middle middleware by default for the functionalities like showing exception with all the details,[8] validating the request and responses according to the Rack spec[9] etc.

Example application

edit

A Rack-compatible "Hello World" application in Ruby syntax:

# helloWorld.ru
# The application that has the call method defined.
class HelloWorld
  # Call method that would return the HTTP status code, the content type and the content.
  def call (env)
    [200, {"content-type" => "text/html; charset=utf-8"}, ["Hello World"]]
  end
end

run HelloWorld.new

The server for the above code can be initiated using "rackup helloWorld.ru" and can be accessed at http://localhost:9292/ The default port used by the Rack application is 9292.

See also

edit

References

edit
  1. ^ "Releases - rack/rack". Retrieved 5 December 2022 – via GitHub.
  2. ^ Pancake: How To Stack and Loosely Couple Rack-Based Webapps Together. Rubyinside.com (2009-12-04). Retrieved on 2013-09-20.
  3. ^ jack - introduction Archived 2014-12-17 at the Wayback Machine. Jackjs.org. Retrieved on 2013-09-20.
  4. ^ ring - introduction. GitHub.com. Retrieved on 2020-04-20.
  5. ^ clacklisp.org. Retrieved on 2014-10-17.
  6. ^ https://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana. Asp.net. Retrieved on 2014-10-01.
  7. ^ a b c "Documentation for rack". www.rubydoc.info. Retrieved 2016-09-14.
  8. ^ "Rack::ShowExceptions". www.rubydoc.info. Retrieved 2016-09-14.
  9. ^ "Rack::Lint". www.rubydoc.info. Retrieved 2016-09-14.
edit

📚 Artikel Terkait di Wikipedia

Web Server Gateway Interface

Server Gateway Interface (ASGI) – The spiritual successor to WSGI, adding support for asynchronous applications Rack – Ruby web server interface PSGI – Perl

Simple Common Gateway Interface

(language-specific): Rack - Ruby web server interface PSGI - Perl Web Server Gateway Interface WSGI - Python Web Server Gateway Interface JSGI – JavaScript

Server (computing)

in much smaller numbers. Servers that run Linux are commonly used as Webservers or Databanks. Windows Servers are used for Networks that are made out

AudioTron

AudioTron with a PC/laptop on the same network using the web interface from the built-in webserver, with a remote control, or on the device itself using buttons

Web server

as its configuration interface. A high-traffic Internet website might handle requests with hundreds of servers that run on racks of high-speed computers

Hard disk drive

are: transaction processing databases, internet infrastructure (email, webserver, e-commerce), scientific computing software, and nearline storage management

Comparison of wiki software

searching, email notification accessible through REST/SOAP APIs Installs own webserver (Commanche) and can co-exist with IIS or Apache. AniAniWeb function provides

List of Google April Fools' Day jokes

from the original on April 4, 2009. Retrieved July 3, 2015. "Netcraft Webserver Identification". Uptime.netcraft.com. Archived from the original on September