
Rack предоставляет минимальный, модульный и адаптируемый интерфейс для разработки веб-приложений на Ruby. Обертывая HTTP-запросы и ответы максимально простым способом, он объединяет и превращает мост между веб-серверами, веб-платформами и веб-приложением в один вызов метода.
Точные детали этого описаны в спецификации стойки, которой должны соответствовать все приложения стойки.
| Версия | Поддерживать |
|---|---|
| 3.1.х | Исправления ошибок и исправления безопасности. |
| 3.0.х | Только патчи безопасности. |
| 2.2.х | Только патчи безопасности. |
| <= 2.1.x | Конец поддержки. |
Пожалуйста, ознакомьтесь с Политикой безопасности для получения дополнительной информации.
Это последняя версия Рэка. Он содержит исправления ошибок и исправления безопасности. Пожалуйста, проверьте журнал изменений для получения подробной информации о конкретных изменениях.
Эта версия стойки содержит существенные изменения, подробно описанные в Руководстве по обновлению. Рекомендуется как можно скорее выполнить обновление до стойки 3, чтобы получить новейшие функции и исправления безопасности.
Эта версия Rack получает только исправления безопасности, и необходимо приложить усилия для перехода на Rack 3.
Начиная с Ruby 3.4, зависимость base64 больше не будет драгоценным камнем по умолчанию и может вызывать предупреждение или ошибку об отсутствии base64 . Чтобы исправить это, добавьте base64 в качестве зависимости к вашему проекту.
Добавьте компонент стойки в пакет приложений или следуйте инструкциям поддерживаемой веб-платформы:
# Install it generally:
$ gem install rack
# or, add it to your current application gemfile:
$ bundle add rack Если вам нужны функции Rack::Session или bin/rackup добавьте эти драгоценные камни отдельно.
$ gem install rack-session rackup Создайте файл config.ru со следующим содержимым:
run do | env |
[ 200 , { } , [ "Hello World" ] ]
endЗапустите это, используя гем Rackup или другой поддерживаемый веб-сервер.
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello WorldRack поддерживается широким спектром серверов, в том числе:
Вам нужно будет обратиться к документации сервера, чтобы узнать, какие функции и ограничения они могут иметь. В общем, любое допустимое приложение Rack будет работать одинаково на всех этих серверах без каких-либо изменений.
Rack предоставляет отдельный гем, Rackup, который представляет собой общий интерфейс для запуска приложения Rack на поддерживаемых серверах, включая WEBRick , Puma , Falcon и другие.
Эти и многие другие платформы поддерживают спецификацию стойки:
Между сервером и платформой Rack можно настроить в соответствии с потребностями ваших приложений с помощью промежуточного программного обеспечения. Сама стойка поставляется со следующим промежуточным программным обеспечением:
Rack::CommonLogger для создания файлов журналов в стиле Apache.Rack::ConditionalGet для возврата ответов Not Modified, когда ответ не изменился.Rack::Config для изменения среды перед обработкой запроса.Rack::ContentLength для установки заголовка content-length в зависимости от размера тела.Rack::ContentType для установки заголовка content-type по умолчанию для ответов.Rack::Deflater для сжатия ответов с помощью gzip.Rack::ETag для установки заголовка etag на телах, которые можно буферизовать.Rack::Events для обеспечения простых перехватов при получении запроса и отправке ответа.Rack::Files для обслуживания статических файлов.Rack::Head для возврата пустого тела для запросов HEAD.Rack::Lint для проверки соответствия спецификации стойки.Rack::Lock для сериализации запросов с использованием мьютекса.Rack::MethodOverride для изменения метода запроса на основе отправленного параметра.Rack::Recursive для включения данных из других путей в приложение и для выполнения внутренних перенаправлений.Rack::Reloader для перезагрузки файлов, если они были изменены.Rack::Runtime для включения заголовка ответа со временем, затраченным на обработку запроса.Rack::Sendfile для работы с веб-серверами, которые могут использовать оптимизированный файловый сервис для путей файловой системы.Rack::ShowException для перехвата необработанных исключений и представления их в удобном и полезном виде с помощью интерактивной обратной трассировки.Rack::ShowStatus для использования красивых страниц ошибок для пустых ответов об ошибках клиента.Rack::Static для более гибкой настройки обслуживания статических файлов.Rack::TempfileReaper для удаления временных файлов, создаваемых во время запроса.Все эти компоненты используют один и тот же интерфейс, подробно описанный в спецификации стойки. Эти дополнительные компоненты можно использовать по вашему желанию.
Если вы хотите разрабатывать за пределами существующих фреймворков, реализовывать свои собственные или разрабатывать промежуточное ПО, Rack предоставляет множество помощников для быстрого создания приложений Rack, не выполняя одни и те же веб-функции повсюду:
Rack::Request , который также обеспечивает анализ строки запроса и обработку нескольких частей.Rack::Response для удобной генерации HTTP-ответов и обработки файлов cookie.Rack::MockRequest и Rack::MockResponse для эффективного и быстрого тестирования приложения Rack без реальных HTTP-обходов.Rack::Cascade для проверки дополнительных приложений Rack, если приложение возвращает ответ «не найдено» или «метод не поддерживается».Rack::Directory для обслуживания файлов в заданном каталоге с индексами каталогов.Rack::MediaType для анализа заголовков типов контента.Rack::Mime для определения типа контента на основе расширения файла.Rack::RewindableInput для возможности перемотки любого объекта ввода-вывода с использованием временного файлового буфера.Rack::URLMap для маршрутизации к нескольким приложениям внутри одного процесса. Rack предоставляет несколько параметров конфигурации для управления различными функциями реализации.
param_depth_limit Rack :: Utils . param_depth_limit = 32 # defaultМаксимально допустимое количество вложений в параметрах. Например, если установлено значение 3, будет разрешена следующая строка запроса:
?a[b][c]=d
но эта строка запроса не будет разрешена:
?a[b][c][d]=e
Ограничение глубины предотвращает возможное переполнение стека при анализе параметров.
multipart_file_limit Rack :: Utils . multipart_file_limit = 128 # defaultМаксимальное количество частей с именем файла, которое может содержать запрос. Принятие слишком большого количества частей может привести к тому, что на сервере закончатся дескрипторы файлов.
Значение по умолчанию — 128, что означает, что один запрос не может загрузить более 128 файлов одновременно. Установите значение 0 для отсутствия ограничений.
Также можно установить через переменную среды RACK_MULTIPART_FILE_LIMIT .
(Это также называется multipart_part_limit и RACK_MULTIPART_PART_LIMIT для совместимости)
multipart_total_part_limitМаксимальное общее количество частей, которые может содержать запрос любого типа, включая как файловые, так и нефайловые поля формы.
Значение по умолчанию — 4096, что означает, что один запрос не может содержать более 4096 частей.
Установите значение 0 для отсутствия ограничений.
Также можно установить с помощью переменной среды RACK_MULTIPART_TOTAL_PART_LIMIT .
См. CHANGELOG.md.
См. CONTRIBUTING.md для получения подробной информации о том, как внести свой вклад в Rack.
Пожалуйста, публикуйте ошибки, предложения и исправления в GitHub Issues.
Пожалуйста, ознакомьтесь с нашей Политикой безопасности, чтобы узнать об ответственном раскрытии информации и процессе сообщения об ошибках безопасности. Из-за широкого использования библиотеки настоятельно рекомендуется управлять временем, чтобы предоставлять жизнеспособные исправления на момент раскрытия. Ваша помощь в этом вопросе очень ценна.
rackup Полезный инструмент для запуска приложений Rack из командной строки, включая Rackup::Server (ранее Rack::Server ) для серверов сценариев.
rack-contrib Множество полезного промежуточного программного обеспечения создало потребность в проекте, который собирает новое промежуточное программное обеспечение Rack. rack-contrib включает в себя множество дополнительных компонентов для Rack, и в него легко добавлять новые модули.
rack-sessionОбеспечивает удобное управление сеансами для Rack.
Команда Rack Core, состоящая из
и выпускники стойки
хотел бы поблагодарить:
Rack::Deflater .Rack::ContentType .Rack::Response .Rack::Response .Rack выпускается под лицензией MIT.