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

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

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

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

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 добавили в программу исключение — вместо аварийного завершения автоматически загрузить отсутствующую программу и отправить предупреждение.

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