Первые 20 часов. Как быстро научиться... чему угодно - читать онлайн книгу. Автор: Джош Кауфман cтр.№ 34

читать книги онлайн бесплатно
 
 

Онлайн книга - Первые 20 часов. Как быстро научиться... чему угодно | Автор книги - Джош Кауфман

Cтраница 34
читать онлайн книги бесплатно

В документации на Heroku указано, что следующая команда позволит приложению Sinatra связываться с базой данных:

DataMapper.setup (: default, ENV ['DATABASE_URL'] ||

"sqlite3://# {Dir.pwd} /database.db")

В данном случае || означает «или». ENV ['DATABASE_URL'] — это переменная, которую Heroku использует для вашей базы данных. Если эта база данных недоступна, то будет применен второй вариант, база данных под названием Sqlite [39].

Sqlite установлена на компьютерах Mac по умолчанию и уже готова к работе. DataMapper может связываться и с Postgres, и со Sqlite, если я установлю обе библиотеки:

$ gem install dm-sqlite-adapter dm-postgres-adapter

Это означает, что мое приложение будет использовать Postgres при запуске на сервере Heroku и Sqlite при запуске на моем компьютере. В обоих случаях моя программа остается одной и той же, несмотря на то что базы данных используют разные языки. Это действительно здорово.

Кстати, по поводу запуска такого приложения на моем компьютере… Как это сделать?

Pow!

Информацию о том, как запустить приложения такого типа на моем компьютере, я искал на Stack Overflow и Hacker News. К счастью, существует несколько вариантов. Похоже, я могу установить библиотеки (например, Foreman или Shotgun), которые выполняют приложение, когда я ввожу команду в Terminal, или программу, поддерживающую приложение все время.

Программа, использующая этот подход, называется Pow [40] — «Rack-сервер нулевой конфигурации для Mac OS X». Сайт обещает установить локальный хостинг для разработки приложений на моем компьютере меньше чем за минуту. Звучит привлекательно!

Установка Pow занимает меньше десяти секунд: для загрузки и установки приложения требуется всего одна команда в Terminal. После этого вы вводите команду, которая связывает вашу программу с Pow, и Pow позволит запускать ее на вашем компьютере.

Библиотека Ruby с названием Powder [41] еще больше облегчает этот процесс:

$ gem install powder

После установки библиотеки вы устанавливаете Pow:

$ powder install

Затем переходите в корневой каталог своего приложения и вводите следующую команду:

$ powder link

Вот и все. Мой корневой каталог называется «codex», поэтому теперь приложение выполняется на моем компьютере на http://codex.dev, и у меня появляется возможность протестировать свою работу.

Если я вношу изменения, следующая команда заново запускает программу:

$ powder restart

Все просто. Теперь я готов писать программу. Каждый вечер я буду выделять полтора часа на составление программы — пока работа не будет закончена.

Кодируем, тестируем, исправляем

Теперь я буду описывать, что я делаю, а не как. Полный текст программы вы, если захотите, сможете найти на https://github.com/first20hours/codex.

Вот как должно выглядеть приложение, когда работа будет завершена.


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

Вы, наверное, заметили, что дизайн страницы состоит из трех частей: верхней навигационной панели, области основного содержания и бокового поля. Я сконструировал эту структуру с помощью инструмента Bootstrap [42], созданного разработчиками Twitter Марком Отто и Джейкобом Торнтоном.

Веб-страницу не нужно разрабатывать с нуля, поскольку Bootstrap представляет собой библиотеку шаблонов HTML и CSS, находящихся в открытом доступе. Использование Bootstrap сэкономит вам уйму времени: вы сможете собрать прототип своего приложения за несколько минут вместо нескольких дней.

Основная единица этого приложения называется «Page», и она отображает запись, хранящуюся в базе данных. Специальная кнопка позволяет просматривать все записи базы данных. Внизу расположены еще две кнопки. Первая дает возможность редактировать текущую страницу, вторая — удалить.

В боковом поле реализованы три основные функции. Вверху расположена форма, позволяющая создать новую страницу, для чего нужно ввести ее название. Здесь также есть список страниц, добавленных пользователем, и этот список может служить указателем. И, наконец, справка по форматированию, помогающая пользователю вспомнить, как применять стандартные функции форматирования.

Верхняя навигационная панель очень проста. Она содержит ссылку на главную страницу, а также дополнительную ссылку на экран «Показать все страницы». Позже я могу добавить еще функции, если потребуется, но пока этого достаточно.

Каждое интернет-приложение имеет главную страницу, и я должен решить, что хочу видеть на своей главной странице. В данном случае мне просто нужно отобразить запись Home базы данных.

Что же содержится в Page? Поскольку каждая Page представляет собой запись базы данных с полями, в которых хранится информация, я должен указать DataMapper, какие поля требуется создать. Вот как это выглядит:

class Page

include DataMapper:: Resource

property: id, Serial

property: title, String

property: content, Text

property: lastupdated, DateTime

end

DataMapper.finalize

Данный фрагмент программы использует DataMapper для создания нового объекта под названием Page. Теперь Ruby может использовать Page подобно любому другому объекту, а я могу создавать и применять методы, которые формируют, изменяют и удаляют объекты Page. Изменения, внесенные в Page, сохраняются в базе данных при помощи DataMapper.

Команда DataMapper.finalize указывает приложению, чтобы оно создало эти поля, если они еще не существуют в действующей базе данных.

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

# Show home page

g e t '/'

# Creates new note from "new page" form

p o s t '/'

# Displays requested note

get '/: url/'

# Edits requested note

get '/: url/edit'

# Saves user edits to note

p o s t '/: u r l /e d it'

# Deletes specified note

delete '/: url/'

# List all pages in database

get '/all/'

# Error handling

not_found

error

Вернуться к просмотру книги Перейти к Оглавлению Перейти к Примечанию