Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Здесь мы видим <% и <%#.Включать открывающий тег немного проще, чем закрывающий. Объясняется это тем, что теги не могут быть вложенными, а программа
erbКонечно, в
erb-MfсnРежим
f-Mf-Mc-Mn$SAFE-n--noheaderМожно настроить сервер Apache так, что он будет распознавать страницы с встроенным кодом на Ruby. Для этого нужно ассоциировать тип
application/x-httpd-erb.rhtmleruby19.7.3. Сервер WEBrick
Авторами WEBrick являются Масаёси Такахаши (Masayoshi Takahashi) и Юзоу Готоу (Yuuzou Gotou) при участии многих других разработчиков. Это библиотека для создания полноценного HTTP-сервера; она входит в стандартный дистрибутив Ruby. Название происходит от слова «brick» (кирпич) — то есть подразумевается нечто небольшое, компактное и автономное.
WEBrick почти ничего не знает о деталях Web-приложений. Он не понимает, что такое сеанс пользователя и прочие тонкости. Он оперирует лишь сервлетами, работающими независимо друг от друга. Если вам необходима функциональность более высокого уровня, поищите другую библиотеку (возможно, надстройку над WEBrick наподобие IOWA или Tofu) или напишите свою собственную.
Работа с WEBrick сводится к такой последовательности действий: создается экземпляр сервера; определяются обработчики монтирования и обработчики сигналов; запускается сервер. Вот небольшой пример:
require 'webrick'server = WEBrick::HTTPServer.new(:DocumentRoot => '.')# (В этом простом примере нет обработчиков монтирования)trap('INT') { server.shutdown}trap('TERM') { server.shutdown}server.startЗапустив эту программу, вы получите Web-сервер, работающий на стандартном порте 80. Он раздает файлы из текущего каталога.
Для создания сервлета требуется создать класс, производный от
WEBrick::HTTPServlet::AbstractServletclass EventsHandler < HTTPServlet::AbstractServlet # ...endclass RecentHandler < HTTPServlet::AbstractServlet # ...endclass AlphaHandler < HTTPServlet::AbstractServlet # ...end# ...server.mount('/events', EventsHandler)server.mount('/events/recent', RecentHandler)server.mount('/events/alpha', AlphaHandler)Как работает сервлет? Идея в том, чтобы определить метод для каждой поддерживаемой HTTP-операции, например
do_GETclass TinyHandler < WEBrick::HTTPServlet::AbstractServlet def do_GET(request, response) # Обработать запрос, вернуть ответ. status, ctype, body = process_request(request) response.status = status response['Content-type'] = ctype response.body = body end def process_request(request) text = "Очень короткая Web-страница..." return 200, "text/html", text endendВ более сложном сервлете, вероятно, использовался бы метод
initializeserver.mountК счастью, не нужно писать сервлеты для каждой крохотной задачки, которую должен выполнять WEBrick. У него есть несколько своих предопределенных сервлетов (все в пространстве имен
WEBrick::HTTPServlet•
FileHandler•
ProcHandler•
CGIHandler•
ERBHandlerПоскольку сервлет
ProcHandlerAbstractServletproc# Непосредственное монтирование блока...server.mount_proc('/here') do |req, resp| resp.body = "Это то, что выводит мой блок."end
