Книга: Программирование на языке Ruby

19.6.1. Основные идеи IOWA

19.6.1. Основные идеи IOWA

Приложение IOWA работает как фоновый процесс, который прослушивает сокет в ожидании запросов. IOWA включает различные адаптеры, так что источником запроса может быть CGI, Mongrel, WEBrick и т.д.

На домашней странице IOWA представлены хорошее объяснение архитектуры и учебное руководство, поэтому здесь мы приведем лишь краткий обзор основных особенностей.

Загрузить IOWA можно с сайта rubyforge.org. Gem-пакет будет подготовлен вместе с версией 1.0. Примеры, представленные в этом разделе, составлены на базе предварительной версии, доступной в виде zip- или tgz-файла.

В состав дистрибутива входит несколько примеров и тестов, демонстрирующих работу каркаса. Мы рассмотрим простое приложение, разработанное на основе этих примеров.

Для приложения IOWA нужен код, который запустит фоновый процесс, а в качестве фронтального процесса мы будем пользоваться встроенным сервером WEBrick. Сценарий арр.rb решает обе задачи:

require 'iowa_webrick'
class HWApplication < Iowa::Application
 self.daemonize = true
 attr_accessor :dbpool
 def initialize(*args)
  super
  Iowa.config[Iowa::Capplication][Iowa::Croot_url] = 'http://127.0.0.1:2000'
 end
end
Iowa.run

По умолчанию конфигурационные данные читаются из файла арр.cnf в текущем каталоге. Вот как выглядит наш файл:

socket:
 hostname: localhost
 path: ..
logging:
 basedir: ../log
 minlevel: 0
 maxsize: 10000000
 maxage: 86400
application:
 daemonize: false
 sessioncache:
  class: LRUCache
  maxsize: 20
  ttl: 3600
 dispatcher:
  class: StandardDispatcher
 policy:
  class: iowa/Policy

Этот файл, записанный в формате YAML, содержит различную информацию о желаемом поведении IOWA. Необходим и еще один конфигурационный файл mapfile.cnf, в котором описывается, как запросы отображаются на компоненты. Вот пример такого файла, содержащий всего одну строку:

/main.html: Main

Запросы к IOWA обычно обслуживаются комбинацией HTML-шаблонов и компонентов IOWA. Парные файлы имеют одинаковое базовое имя, но разные расширения. Принимаемый по умолчанию шаблон/объект называется Main, так что приложение состоит из файлов Main.html и Main.iwa.

Файлы с расширением .iwa представляют собой программы на Ruby; такое расширение в IOWA используется для того, чтобы отличить их от прочего кода, который может входить в состав приложения. Эти файлы играют ту же роль, что классы контроллеров в Nitro и Rails. Определенные в классе компонента методы доступны из соответствующего HTML-файла.

Демонстрационный файл Main.html выглядит так:

<html>
 <head><title>Текущее время...</title></head>
 <body>
  <р>Текущее время @now.</p>
  <р>Счетчик равен @count.</p>
  <а oid="reload">RELOAD</a>
 </body>
</html>

В шаблонах IOWA можно смешивать обычный HTML-код и переменные экземпляра компонента. Отметим, что переменные необязательно «интерполировать» обычным способом, достаточно просто включить их в разметку.

Имеется также специальная переменная oid, IOWA использует ее для динамического изменения шаблона в процессе прорисовки. В нашем примере с ее помощью создается ссылка на метод reload из класса компонента, определенного в файле Main.iwa. Если задержать мышь над этой ссылкой в полученной странице (или посмотреть ее исходный текст), то вы увидите URL следующего вида:

http://127.0.0.1:2000/main.html/6b38f6fb-4f087af7-ab6JaqUM9KyWE.a.1.7

Такие URL позволяют IOWA отслеживать состояние сеанса. Если несколько раз щелкнуть по ссылке, то вы увидите, что URL изменяется. Если вручную восстановить предыдущее значение, вы получите состояние сеанса, соответствующее URL.

В данном случае состояние — это значение переменной экземпляра @count. Вот как выглядит файл Main.iwa:

class Main < Iowa::Component
 attr_accessor :count
 def awake
  @count = 0
 end
 def setup
  @count += 1
 end
 def now
  Time.now.asctime
 end
end

Оглавление книги


Генерация: 1.478. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз