Автор (ы) | Масаёси Такахаши и Юдзо Гото |
---|---|
Разработчик (и) | Ruby Сообщество |
Стабильный выпуск | 1.6.0 / 30 ноября 2019 г. (2019-11-30) |
Репозиторий | |
Написано на | Ruby |
Операционная система | Кросс-платформенность |
Доступно в | Ruby |
Тип | Веб-сервер |
Лицензия | Лицензия BSD с двумя пунктами |
Веб-сайт | www.ruby-lang.org |
WEBrick - это библиотека Ruby, предоставляющая простые HTTP веб-серверы. WEBrick изначально был написан Масаеши Такахаши и Юдзо Гото при участии других разработчиков в рамках модели с открытым исходным кодом разработки программного обеспечения. Он использует базовую аутентификацию доступа и дайджест-аутентификацию доступа для различных типов серверов, которые он может создавать - сервер на основе HTTP, Сервер HTTPS, прокси-сервер и сервер виртуального хоста. WEBrick также способствует созданию нескольких серверов, отличных от HTTP, таких как дневной сервер, который использует дневной протокол, а не HTTP. Он используется фреймворками Ruby on Rails и Padrino для тестирования приложений в среде разработки , а также в режиме production для небольших нагрузок.. Теперь он является частью стандартной библиотеки Ruby.
WEBrick возник из идеи в статье «Интернет-программирование с помощью Ruby» в японском инженерном журнале Open Design. Первоначально он разрабатывался как инструментарий для разработки HTTP-серверов с использованием Ruby. В связи с характером модели с открытым исходным кодом и вкладом нескольких разработчиков Ruby по всему миру, WEBrick был значительно расширен и в конечном итоге был включен в качестве стандартной библиотеки из Ruby 1.8.0. Обработчик WEBrick ERB и прокси-сервер WEBrick были впервые представлены в Ruby 1.9.3, а виртуальный хост WEBrick был включен из Ruby 2.0.0.
Сервер WEBrick понимает только язык сервлетов. Он использует несколько независимых сервлетов, объединенных вместе программистом, для обработки CGI скриптов, страниц ERB, Ruby Blocks и списков каталогов для предоставления веб-приложения или обслуживать запрос URI для каждого хоста или каждого пути. Например, HTTPServlet :: FileHandler, HTTPServlet :: ProcHandler, HTTPServlet :: CGIHandler, HTTPServlet :: ERBHandler являются примерами стандартные сервлеты, которые поставляются с WEBrick.
WEBrick включен в Ruby и, следовательно, доступен пользователю без дополнительных затрат. WEBrick полностью написан на Ruby и поддерживает несколько стандартов, таких как HTTP, HTML и даже RHTML. На этапе разработки нет необходимости в установке отдельного веб-сервера, поскольку WEBrick уже встроен в среду Rails. Это веб-сервер по умолчанию, когда приложение Ruby развертывается без какого-либо файла procfile в Rails. Более того, поскольку он полностью реализован на Ruby, прямые вызовы могут выполняться из WEBrick в приложение Rails. В целом, это надежный вариант с низкой конфигурацией для тестирования в процессе разработки.
Для запуска HTTP-сервера на требуемом порту используются следующие команды.
# Включить класс WEBrick с помощью require require ' webrick '# Сервлет FileHandler предоставляет возможность выбрать, какие файлы от пользователя обслуживать # Следующий код показывает, как обслуживать их из папки' myapp 'root = File.expand_path' / var / myapp / '# Создание нового сервера с HTTPServer.new на порту 1234, обслуживающем документы из корневой папки server = WEBrick :: HTTPServer.new: Port =>1234,: DocumentRoot =>root # Следующая процедура используется для настройки серверных операций server.mount_proc '/' do | request, ответ | response.body = 'Привет, мир!' end # Следующая команда предоставит ловушку для выключения сервера (часто выполняется с помощью Ctrl + C) trap ('INT') {server.shutdown} # Запуск сервера server.start
Сервлеты могут быть смонтированы для обеспечения расширенных возможностей настраиваемое поведение по сравнению с процедурой для увеличения модульности.
WEBrick создает порт прослушивания. Различные другие порты как «виртуальные хосты» также могут быть созданы одновременно, которые не слушают, как показано ниже:
# Создание виртуального хоста, который не слушает vhost = WEBrick :: HTTPServer.new: ServerName =>' vhost.example ',: DoNotListen =>true, #... # Подключение виртуального хоста, созданного выше, аналогично тому, как был подключен HTTP-сервер vhost.mount' / ',... # Этот хост при подключении к слушающему серверу host, теперь будет действовать как виртуальный хост-сервер. virtual_host vhost
: должен быть предоставлен DocumentRoot или должен быть настроен экземпляр сервлета для обслуживания запроса URI ; в противном случае будет возвращена ошибка 404.
Просто включив SSL и указав имя сертификата SSL, сервер HTTPS может быть запущен с помощью самозаверяющего сертификата который меняется при каждом перезапуске сервера.
# В дополнение к webrick, нам также потребуется webrick / https для функций SSL, требуется 'webrick' require 'webrick / https' # Предоставление имени сертификата. Однако это будет самогенерируемый самоподписанный сертификат cert_name = [% w [CN localhost],] # Включение SSL и указание имени сертификата создаст экземпляр сервера HTTPS server = WEBrick :: HTTPServer.new (: Port =>1234,: SSLEnable =>true,: SSLCertName =>cert_name)
Однако предварительно определенный ключ и сертификат также могут быть предоставлены для создания экземпляра сервера HTTPS, как показано ниже:
# В дополнение к двум вышеупомянутым, мы 'вам понадобится openssl для чтения сертификатов SSL, а ключи требуют' openssl '# Прочтите сохраненный сертификат и его ключ подписи из локального каталога cert = OpenSSL :: X509 :: Certificate.new File.read' /var/myapp/cert.pem 'pkey = OpenSSL :: PKey :: RSA.new File.read' /var/myapp/pkey.pem '# Передайте сертификат и ключ как отдельные параметры при создании экземпляра с HTTPServer.new server = WEBrick :: HTTPServer.new ( : Port =>1234,: SSLEnable =>true,: SSLCertificate =>cert,: SSLPrivateKey =>pkey)
WEBrick также может проксировать GET, HEAD и POST r equests :
# Создание прокси-сервера аналогично, за исключением того, что оно обрабатывается сервлетом HTTPProxyServer require 'webrick / httpproxy' proxy = WEBrick :: HTTPProxyServer.new: Port =>1234 # Обеспечение перехвата из ловушки текущего потока ' INT 'do proxy.shutdown end
В отличие от большинства серверов, которые используются в производстве, WEBrick не масштабируется, поскольку по умолчанию это однопоточный веб-сервер. Следовательно, несколько запросов одновременно не могут быть обработаны, и последующие запросы должны будут ждать, пока все предыдущие запросы будут обработаны, что приведет к большой задержке. Следовательно, для развертывания своих приложений Rails разработчики предпочитают другие многопоточные полноценные веб-серверы, такие как Lighttpd и Mongrel.