Чтение онлайн

на главную

Жанры

Первые 20 часов. Как быстро научиться… чему угодно
Шрифт:

Маршруты GET, POST, PUT и DELETE — это основа работы приложений Sinatra. Каждый создаваемый вами маршрут является условным: «Делать Х, если команда GET/POST/PUT/DELETE получена на маршруте Y».

Маршруты Sinatra также содержат переменные, которые называются параметрами. Приложения Sinatra обычно используют параметры в качестве входных данных для процесса, содержащегося в каждом маршруте.

Давайте модифицируем наше простое приложение Sinatra «Hello, World!», чтобы оно приветствовало пользователя по имени. Вот маршрут, который это делает:

get '/hello/: name' do

"Hello, # {params [: name]}!"

end

Вы

можете увидеть результат наПопробуйте заменить «name» своим именем. Работает!

Это приложение позволяет серверу посмотреть, что содержится в параметре маршрута «name», и использовать это значение. Команда маршрута представляет собой простую инструкцию — показать параметр «name» пользователю.

Sinatra позволяет вам дать название параметру (например, name), но также имеет «универсальный» параметр (его также называют «решеткой» (splat)), который может содержать все что угодно. Вот как можно использовать его в нашем модифицированном приложении «Hello»:

get '/hello/*' do

"Hello, # {params [: splat]}!"

end

Это очень удобно. С помощью обычных и универсальных параметров можно прописывать самые замысловатые маршруты. Создаваемые вами маршруты определяют работу приложения Sinatra.

Этих сведений достаточно, чтобы понять, как написать программу, которая удовлетворяет моему целевому уровню мастерства. Поскольку Jekyll создает файлы, которые приложение предоставляет по запросам пользователей GET, мне остается лишь написать несколько маршрутов, которые принимают эти запросы, находят в системе нужные файлы и предоставляют их читателю.

Как указывается в документации на Jekyll, программа помещает законченные веб-страницы в папку под названием «site» в корневом каталоге. Маршрут к этой странице автоматически генерируется Jekyll. Если мы хотим, чтобы наша страница About была доступна намы ставим маршрут /about в файлах Jekyll, и программа создаст файл в _site/about/index.html в корневом каталоге нашего сайта.

Это означает, что я должен создать новый маршрут в Sinatra, чтобы прочесть файл в ответ на запрос пользователя GET. Вот как он будет выглядеть:

# Index handler

get '/?' do

## File.read ("_site/index.html")

end

# Post handler

get '/*/?' do

## File.read ("_site/# {params [: splat]} /index.html")

end

Команда File.read (“”) встроена в Ruby. File — это объект, read — метод. Используется она очень просто: содержимое (“”) указывает на расположение файла, который должна прочитать программа, относительно корневого каталога приложения. Легко.

А что если такого файла нет? В этом случае необходимо исключение, и в Sinatra встроены два основных маршрута ошибок: not_found и error. Давайте сделаем так, чтобы оба маршрута вызывали одну и ту же страницу с сообщением об ошибке:

not_found do

## File.read ("_site/error/index.html")

end

error do

File.read ("_site/error/index.html")

end

Все остальное остается таким же. Я

не собираюсь вносить изменения в config.ru или Gemfile. Я просто добавляю новые маршруты в программный репозиторий Git, внося изменения, а затем размещаю исправленные программы на Heroku. Готово.

Хотите посмотреть, как работает модифицированная программа? Зайдите на сайт PersonalMBA.com: в настоящее время сайт работает на Jekyll вместо WordPress, используя именно эту программу. При помощи программы нагрузочного тестирования, которая называется seige, мой сайт теперь способен без труда обслуживать две тысячи посетителей одновременно. Большинство запросов страниц обрабатываются за 18–20 миллисекунд, так что мой сайт полностью защищен от падения при большом трафике.

Мое первое рабочее интернет-приложение завершено. Мне потребовалось около часа, чтобы разобраться, что я должен делать, и еще час, чтобы понять, как перенести информацию и дизайн моего сайта с WordPress на Jekyll.

Общее время составило около десяти часов, включая исследования и обзор концепций программирования. Не так плохо!

Приложение № 2: Codex, персональная база данных

Мое первое приложение работает, и работает хорошо. Оно простое, и в данном случае это его главное преимущество. Чем меньше движущихся деталей, тем меньше вероятность поломки — это справедливо и для программы.

Давайте займемся чем-нибудь чуть более сложным.

Помните наш разговор о базе данных? Главные веб-страницы не могут обновляться, а значит, не могут хранить информацию. Мое первое приложение работает только потому, что файлы статичны: они не изменяются. Любые изменения в файлы вносятся посредством Jekyll, отдельной программы. Приложение получилось быстрым и стабильным потому, что не использует базу данных.

А как быть с программами, использующими базы данных? Базы данных обычно являются важной частью большинства приложений, и поэтому я должен понять, как они устроены. А для этого нужно начать работу над проектом, основанным на базе данных.

Одно из приложений, которым я пользуюсь, называется Backpack [33] и разработано компанией 37signals. Основное преимущество Backpack — возможность создавать страницы, содержащие все что угодно: текст, списки, изображения, файлы и так далее. Сохранив информацию о странице в Backpack, впоследствии вы можете получить к ней доступ с любого компьютера, поскольку вся информация хранится в базе данных приложения.

Я спрашиваю себя: могу ли я сам создать нечто подобное? Попробовать стоит… но с чего начать?

Изучая Jekyll, я прочел статью программиста Тома Престона-Вернера, создателя Jekyll, под названием «Начни разработку с Readme» («Readme Driven Development») [34]. Идея статьи заключалась в том, что вопреки волнам увлечения проектным менеджментом, которые каждые несколько лет захлестывают индустрию программного обеспечения, лучший способ создать приложение — начать с написания ознакомительного документа Readme.

Файл Readme программисты включают в корневой каталог приложения вместе с программным кодом. В нем содержится информация по установке, настройке и использованию программы.

Поделиться:
Популярные книги

Без шансов

Семенов Павел
2. Пробуждение Системы
Фантастика:
боевая фантастика
рпг
постапокалипсис
5.00
рейтинг книги
Без шансов

Назад в ссср 6

Дамиров Рафаэль
6. Курсант
Фантастика:
попаданцы
альтернативная история
6.00
рейтинг книги
Назад в ссср 6

Идеальный мир для Лекаря 13

Сапфир Олег
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 13

Не грози Дубровскому! Том V

Панарин Антон
5. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том V

Морозная гряда. Первый пояс

Игнатов Михаил Павлович
3. Путь
Фантастика:
фэнтези
7.91
рейтинг книги
Морозная гряда. Первый пояс

Лишняя дочь

Nata Zzika
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Лишняя дочь

Не грози Дубровскому! Том II

Панарин Антон
2. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том II

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Царь поневоле. Том 2

Распопов Дмитрий Викторович
5. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Царь поневоле. Том 2

Кодекс Крови. Книга I

Борзых М.
1. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга I

Второй Карибский кризис 1978

Арх Максим
11. Регрессор в СССР
Фантастика:
попаданцы
альтернативная история
5.80
рейтинг книги
Второй Карибский кризис 1978

Ведьма

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.54
рейтинг книги
Ведьма