Шрифт:
Интервал:
Закладка:
3. Использовать команду git push heroku master, чтобы отправить готовое приложение на Heroku.
К счастью, в руководстве есть пример, и это приложение, написанное в среде Sinatra! Похоже, все проще, чем я думал…
Я создаю на своем компьютере новую папку. Эта папка называется «корневой», и в ней будут храниться все файлы программы.
Далее я открываю текстовый редактор (я пользуюсь редактором TextMate [30]) и, следуя инструкции, создаю три файла:
application.rb
config.ru
Gemfile
Ядро программы будет находиться в application.rb. Приложения, написанные на языке Ruby, всегда оканчиваются расширением. rb.
В файле config.ru будут храниться параметры конфигурации Rack. Не забывайте, что Sinatra построена над интерфейсом Rack, и поэтому вполне логично, что у него есть отдельный файл конфигурации. Эти файлы оканчиваются расширением. ru.
Gemfile — это место, где указываются библиотеки, используемые программой. Ваша программа может иметь только один такой файл, и поэтому он всегда называется одинаково — «Gemfile». Все довольно просто.
Документация по Heroku рекомендует после создания этих файлов написать простейшую программу «Hello, World!», чтобы проверить настройки. Вот что должно быть в файле application.rb:
require 'sinatra'
get '/' do
"Hello, World!"
end
А так выглядит файл config.ru:
require './application.rb'
run Sinatra:: Application
И наконец, Gemfile:
source 'http://rubygems.org'
gem 'sinatra'
Программа совсем короткая, и понять ее нетрудно.
● Gemfile указывает серверу включить библиотеку Sinatra, которая требуется для работы приложения. Библиотека будет загружена с сайта RubyGems.org.
● Файл config.ru указывает основное приложение, затем выполняет программу.
● После запуска программа будет отображать на экране «Hello, World!», когда кто-либо нажмет «/», что указывает на возврат на главную страницу сайта.
Неужели все так просто?
В руководстве говорится, что я должен сделать еще одну вещь: сохранить файлы в репозитории git (иногда его называют просто «репо»). Я не могу сказать, что означает этот термин, но знаю, что git уже установлен, а необходимые команды есть в руководстве:
$ git init.
$ git add — A
$ git commit — m "Initial Commit"
Первая команда создает новый репозиторий git в папке корневого каталога. Команда add — A добавляет все файлы в папку репозитория. Команда commit — m фиксирует файлы в репозитории вместе с сообщением программиста, что именно фиксируется. (Я пока не очень понимаю разницу между «добавлять» и «фиксировать» и беру этот вопрос на заметку, решив разобраться с ним позже.)
После ввода этих команд компьютер отвечает:
[master (root-commit) 8ed1099] Initial commit
3 files changed, 9 insertions (+), 0 deletions (-)
create mode 100644 Gemfile
create mode 100644 application.rb
create mode 100644 config.ru
Похоже, все получилось! Осталось одно действие: создать новый пустой сервер на Heroku, а затем «поместить» мою программу на этот сервер:
$ heroku create
Я получаю ответ:
Creating shielded-springs-2049… done, stack is stack
is bamboo-ree-1.8.7
http://shielded-springs-2049.heroku.com/ | git@heroku.
com: shielded-springs-2049.git
Git remote heroku added
Получилось! «Stack» указывает программное обеспечение, выполняемое на сервере, и в сообщении прописывается общедоступный URL сервера.
И последняя команда:
$ git push heroku master
Если все пройдет хорошо, то я официально помещу свое первое приложение для выполнения на Heroku.
Вот что я получаю в ответ:
Heroku receiving push
Ruby/Sinatra app detected
Gemfile detected, running Bundler version 1.0.7
Unresolved dependencies detected; Installing…
Using — without development: test
! Gemfile.lock will soon be required
! Check Gemfile.lock into git with `git add Gemfile.lock`
! See http://devcenter.heroku.com/articles/bundler
Fetching source index for http://rubygems.org/
Installing rack (1.4.1)
Installing rack-protection (1.2.0)
Installing tilt (1.3.3)
Installing sinatra (1.3.3)
Using bundler (1.0.7)
Your bundle is complete! It was installed into./.bundle/gems/
Compiled slug size: 500K
Launching… done, v4
http://shielded-springs-2049.heroku.com deployed to Heroku
И теперь. момент истины… Я открываю веб-браузер, перехожу на http://shielded-springs-2049.heroku.com и вижу вот что:
«Hello, World!»
ПОБЕДА!
Программа заработала, но я также получил предупреждение. Что такое Gemfile.lock?
В документации Heroku’s Ruby указано, что для установки библиотек на Heroku система использует библиотеку под названием bundler [31]. Это библиотека, и поэтому я могу установить ее при помощи следующей команды:
$ gem install bundler
Библиотека bundler необходима потому, что Heroku по умолчанию не устанавливает библиотеки из вашего приложения. Из соображений безопасности Heroku не присваивает мне такой уровень доступа к серверу, какой есть у меня на моем компьютере, и я не могу выполнить команду gem install sinatra прямо в моей учетной записи.
Вместо того чтобы предоставить мне (и другим пользователям) небезопасный уровень доступа к системе, Heroku использует bundler для установки библиотек, указанных в Gemfile. Отметив, какие библиотеки вы хотите установить в своем приложении, вы набираете команду:
$ bundle install
Эта команда создает в вашей программе новый файл под названием Gemfile.lock. Когда вы загружаете свои файлы в Heroku, система просматривает Gemfile и Gemfile.lock, проверяет их идентичность, после чего загружает библиотеки, а затем устанавливает их для вас.
Если вы посмотрите на ответ системы, когда я размещал программу на Heroku, то увидите, что система устанавливала bundler автоматически, как средство поддержки зависимостей. Вместо того чтобы предусмотреть сообщение об ошибке, инженеры Heroku добавили в программу исключение — вместо аварийного завершения автоматически загрузить отсутствующую программу и отправить предупреждение.