Затем добавим в него папку public
, содержащую файл index.html
:
/home/jbritt/demo/public/index.html
Д ля начала сделаем этот файл совсем простым:
The Ruby Way
Hal Fulton
Теперь в корневом каталоге приложения создадим файл run.rb
:
require 'nitro'
Nitro.run
Чтобы увидеть новое приложение в действии, запустите файл run.rb
(из каталога demo/
). Потом откройте браузер и введите URL http://127.0.0.1:9999 (здесь 9999 — порт Nitro по умолчанию).
Если все пройдет удачно, то появится приведенная выше простая страница. Принимайте поздравления — вы создали первое приложения для Nitro! Разумеется, Nitro позволяет делать гораздо больше, поэтому посмотрим, как это приложение можно расширить.
Прежде всего, интерес представляет файл run.rb
. В зависимости от того, как вы развернули свою программу, его запуском может заниматься диспетчерский сценарий в каталоге public
. Но для демонстрации и тестирования вы можете запустить его вручную и воспользоваться встроенным диспетчером WEBrick. Впрочем, для промышленной эксплуатации имеет смысл изучить предоставляемую Nitro поддержку Mongrel, SCGI или FastCGI.
Nitro поддерживает много разных архитектур и паттернов, а приложение обычно строится на базе паттерна Модель-Вид-Контроллер (model-view-controller, MVC). Окончательный выбор всегда остается за вами, a Nitro облегчает переход от простых сайтов, предназначенных только для просмотра, к полноценным приложениям с поддержкой базы данных.
По умолчанию при обработке запроса Nitro сначала ищет файл в папке public
. Предполагается, что если имя страницы явно не указано, речь идет о файле index.html
. В этом отношении Nitro ведет себя как любая статическая система. При желании мы можем поместить в папку public
дополнительные статические HTML-страницы, а в ее подпапках хранить изображения и CSS-файлы.
Но интереснее то, что происходит, когда Nitro не может найти прямого соответствия запрошенной странице. Давайте изменим расширение файла index.html
на .xhtml
:
public/index.xhtml
Перезапустите сценарий run.rb
. Снова введите URL http://127.0.0.1:9999, вы должны увидеть ту же самую страницу. Не найдя файла index.html
, Nitro ищет файл index.xhtml
и загружает его. По умолчанию xhtml
— расширение, применяемое в Nitro для динамического контента. В общем случае, получив запрос, Nitro сначала ищет файл с расширением html
, а потом — xhtml
.
В XHTML-файлах могут быть подставляемые переменные и программная логика. Измените файл index.xhtml
следующим образом:
The Ruby Way
Hal Fulton
Page last updated: #{Time.now}
После перезагрузки страницы вы увидите текущие дату и время. Nitro также поддерживает синтаксис команд обработки, принятый в XML:
The Ruby Way
Hal Fulton
Page last updated: #{curr_date}
Отметим, что из наличия синтаксиса не следует, что весь шаблон должен подчиняться правилам XML. Nitro располагает средствами для обработки шаблонов как XML-документов, а такой синтаксис позволяет иметь шаблоны, которые одновременно являются корректными XML-документами.
19.4.2. Nitro и паттерн MVC
Вставка кода непосредственно в шаблон удобна для экспериментов и перехода со статических страниц на динамические. Но со временем обнаруживается, что тестировать и сопровождать такое приложение становится все сложнее. Паттерн Модель-Вид-Контроллер позволяет упростить жизнь за счет переноса кода в классы Ruby.
Начнем с создания класса контроллера main.rb
. Если в каталоге приложения есть папка src
, Nitro добавит ее в список путей, по которым ищутся страницы. Следуя принятым в Nitro соглашениям, создадим файл /src/controller/book.rb
:
class BookController
def index
@author = "Hal Fulton"
@title = "The Ruby Way"
@last_update = Time.new
end
end
Изменим файл index.xhtml
, включив в него ссылки на эти переменные:
#{@title}
#{@author}
Page last updated: #{@last_update}
Придется также немного подправить файл run.rb
:
require 'nitro'
require 'controller/book'
Nitro.run(BookController)
Перезапустите сервер WEBrick и перезагрузите страницу, чтобы посмотреть на результат.
Отметим несколько вещей. Файлы шаблонов могут остаться в папке public
; класс контроллера не обязан расширять какой-то специальный базовый класс; класс, переданный методу Nitro.run
, автоматически сопоставляется с корневым URL приложения. Все эти аспекты конфигурируемы.
По умолчанию Nitro ищет шаблоны в каталогах template
и public
. Если вы не хотите помещать шаблоны в каталог public
(скажем, потому, что предпочитаете зарезервировать его только для статических HTML-файлов), то можете создать каталог template
и хранить их там. Предполагается, что пути к шаблонам повторяют пути, заданные в URL, относительно корневой папки шаблонов. Наш файл index.xhtml
мог бы храниться как public/index.xhtml
или template/index.xhtml
. Использование каталога public
упрощает переход от статического сайта к динамическому, но лучше организовать раздельное хранение статических файлов и шаблонов.
Читать дальше
Конец ознакомительного отрывка
Купить книгу