Просто добавьте упрощенное объяснение Rack (как мне кажется, его не хватает):
Rack - это, по сути, способ, с помощью которого веб-приложение может взаимодействовать с веб-сервером.Связь происходит следующим образом:
- Веб-сервер сообщает приложению о
environment
- он содержит в основном то, что пользователь отправил в качестве своего запроса - URL, заголовки, будь то GET илиPOST и т. д. - Веб-приложение отвечает тремя вещами:
- код
status
, который будет выглядеть примерно так: 200
, когда все прошло нормально, и выше 400
, когда что-то происходит.неправильно. headers
, который представляет собой информацию, которую веб-браузеры могут использовать как информацию о том, как долго можно удерживать веб-страницу в своем кеше и прочем. body
, который являетсяреальная веб-страница, которую вы видите в браузере.
Эти два шага более или менее могут определить весь процесс работы веб-приложений.
Так что очень простоПриложение в стойке может выглядеть так:
class MyApp
def call(environment) # this method has to be named call
[200, # the status code
{"Content-Type" => "text/plain", "Content-length" => "11" }, # headers
["Hello world"]] # the body
end
end
# presuming you have rack & webrick
if $0 == __FILE__
require 'rack'
Rack::Handler::WEBrick.run MyApp.new
end