Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
<р>Обед закончен. Вот что мы можем предложить на десерт:</р><ul oid="dessert_list"> <li>@dessert_item</li></ul></if><p>Мы еще должны сообщить IOWA, что выводить на каждой итерации, поэтому в конце файла
Main.iwa<? dessert_list { item = dessert_item list = desserts} ?>Тем самым производится связывание списка
dessert_listdessert_itemdesserts19.6.3. Передача управления компоненту
Бывает полезно разнести логику приложения по нескольким классам компонентов. Мы видели, как можно отобразить URL на компоненты. Имеется также способ передать управление, не изменяя базового пути в URL.
Добавим в файл
Main.iwadef dessert_choice new_page = page_named( 'DessertChoice') new_page.choice = @dessert_item yield new_pageendТакже изменим цикл формирования списка десертов в
Main.html<ul oid="dessert_list"> <li><a oid= 'dessert_choice'>@dessert_item</a></li></ul>Тут происходит немало интересного; атрибут
oiduldessert_choicedessert_choicepage_namedDessertChoicechoice=yieldНовый компонент также определяется с помощью пары файлов с расширениями
.iwa.htmlclass DessertChoice < Iowa::Component attr_accessor :choice def details "Детали #{@choice} нужно было брать из базы данных." endendА в файле
DessertChoice.html<html> <head><title>Выбранный вами десерт</title></head> <body> <h1>Десерт!</h1> <p>@details</p> </body></html>Об IOWA можно было бы рассказывать еще долго. Для получения дополнительной информации зайдите на домашнюю страницу IOWA (http://enigo.com/proiects/iowa/) или на страницу проекта IOWA на сайте RubyForge (http://rubyforge.org/projects/iowa).
19.7. Ruby и Web-сервер
На сегодняшний день одним из самых популярных Web-серверов является Apache. Если вы работаете с ним, то должны знать о модуле
mod_rubyЕще одна полезная возможность на стороне сервера — встроенный Ruby; эту технологию поддерживают инструменты
erberubyНекоторые разработчики реализовали Web-серверы, написанные целиком на Ruby. Естественно возникает вопрос: зачем писать новый Web-сервер, когда их уже и так существует немало — взять хотя бы тот же Apache?
Во-первых, есть ситуации, когда желательно иметь специализированный Web-сервер, например ради нестандартного способа обработки страниц, когда можно пожертвовать функциональностью ради скорости, или для автоматической трансляции специальной разметки в HTML.
Во-вторых, может возникнуть желание поэкспериментировать с поведением сервера и его взаимодействием с внешним кодом, например с CGI-программами. Возможно, у вас есть какие-то идеи относительно создания сервера приложений и среды разработки на стороне сервера. А все мы знаем, что Ruby прекрасно подходит для экспериментов.
В-третьих, иногда бывает разумно встроить Web-сервер в другое приложение. К этой возможности прибегают разработчики, желающие предоставить функциональность программной системы внешнему миру; протокол HTTP прост и четко определен, а Web-браузеры в качестве клиентов есть повсюду. Этот прием можно даже использовать для удаленной отладки, если система часто обновляет свое внутреннее состояние и делает его доступным встроенному серверу.
И последняя причина заключается в том, что небольшой автономный Web-сервер может упростить развертывание и конфигурирование. Например, перезапустить сервер для приложения Rails гораздо проще, если в этом качестве выступает WEBrick, а не Apache.
Имея все это в виду, посмотрим, что Ruby предлагает в плане Web-серверов. В прошлом было по крайней мере четыре таких сервера, но летом 2006 года остались два наиболее значимых: WEBrick и Mongrel. Они описаны в разделах 19.7.3 и 19.7.4 соответственно.
19.7.1. Модуль mod_ruby
Обычно, если CGI-сценарий пишется на интерпретируемом языке, то при каждом запросе загружается новый экземпляр интерпретатора. Это дорого обходится с точки зрения потребления ресурсов сервера и времени выполнения.
Сервер Apache решает эту проблему путем создания загружаемых модулей, которые, по существу, становятся частью сервера. Они загружаются динамически по мере необходимости и становятся общими для всех зависящих от них сценариев. Одним из таких модулей является
mod_ruby
