Как стать автором
Обновить

Развертываем свой сайт на Heroku

Время на прочтение4 мин
Количество просмотров163K
Здравствуй, Хабрахабр! Недавно у меня возникла необходимость развернуть свое Rails web-приложение на Heroku и я, к своему удивлению, не нашел почти ничего об этом на просторах не только Хабра, но и рунета в целом, поэтому я решил поделиться с вами своим опытом. Подробности о том, что и как я делал находятся под катом!




Сегодня я расскажу о том, как быстро и легко задеплоить свое приложение на Heroku. Если статья вызовет интерес я напишу продолжение о том, как быстро и удобно «перевести» приложение на свой домен и несколько советов о самом приложении, связанных с этим.



Развертывание приложения на Heroku


Регистрация

Первым делом вам будет необходимо зарегистрироваться на Hreoku. После того, как вы подтвердите свой e-mail нужно будет заполнить еще немного данных в своем профиле. В общем, ничего сложного, ничего необычного.

Вход в свой профиль и инициализация git-репозитория

Установка Heroku Toolbelt

Первым делом необходимо установить ПО для командной строки от Heroku на свой компьютер, если вы еще этого не сделали. Для Ubuntu и Debian процесс установки заключается в выполнении следующей команды:

user@host:~/rails/myapp$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh


Для остальных дистрибутивов Linux — этой:

user@host:~/rails/myapp$ wget -qO- https://toolbelt.heroku.com/install.sh | sh


Честно говоря, я не знаю отличаются ли эти скрипты чем-либо. Пользователи же Windows и OS X могут скачать установочные файлы здесь.

Вход в профиль с командной строки

После того, как весь необходимый инструментарий установлен, вам необходимо залогиниться в Heroku с командной строки:

user@host:~/rails/myapp$ heroku login

Enter your Heroku credentials.
Email: user@example.com
Password:
Could not find an existing public key.
Would you like to generate one? [Yn]
Generating new SSH public key.
Uploading ssh public key /home/user/.ssh/id_rsa.pub

Если вы еще не генерировали открытый ключ для SSH то вам будет предложено это сделать.

Инициализация git-репозитория

Если вы не используете систему контроля версий или используете, но отличную от git то вам придется создать локальный git-репозиторий на своем рабочем компьютере т.к. Heroku поддерживает только эту систему контроля версий. Все очень просто:

user@host:~/rails/myapp$ git init && git commit -am "init"


Некоторые специфические моменты

Чтобы ваше web-приложение корректно работало необходимо добавить rails_12factor в ваш Gemfile (если вы использует Rails 4) и там же указать версию ruby (для всех версий Rails):

gem "rails_12factor", group: :production

#
# Другие ваши gem-ы
#

# Версию Ruby следует указывать в конце файла
ruby "2.1.2"


Обратите внимание, вы должны использовать эту же версию Ruby и у себя.

Если вы используете web-сервер отличный от WEBrick (Thin в моем случае), что, кстати, рекомендуется самим сервисом Heroku, то вам необходимо будет создать так же Procfile приблизительно следующего содержания:
web: bundle exec thin start -p $PORT


Последние штрихи

Наша работа по запуску web-приложения практически подошла к концу, остались последние штрихи. Далее будет предполагаться что вы используете PostgreSQL в качестве СУБД. Если вы используете MySQL — немного ниже я рассказал о том, как подружить эту СУБД с Heroku. Итак, создадим приложение в Heroku:

user@host:~/rails/myapp$ heroku create myapp

Creating myapp... done, stack is cedar
http://myapp.herokuapp.com/ | git@heroku.com:myapp.git
Git remote heroku added


Вообще говоря, вы можете и не указывать имя приложения при создании, тогда Heroku сама выдумает вам что-то вроде deep-sea-69.
Теперь ваше приложение доступно по адресу myapp.herokuapp.com, но там пока ничего нет. Чтобы это исправить необходимо запушить ваше приложение на сервер Heroku:

user@host:~/rails/myapp$ git push heroku master


Возможно вам понадобится сделать asset precompile чтобы все работало нормально (лично мне пришлось, если кто-то подскажет как заставить Heroku делать все в автоматическом режиме — буду благодарен):

user@host:~/rails/myapp$ rake assets:precompile RAILS_ENV=production


После этого выполните все миграции…

user@host:~/rails/myapp$ heroku run rake db:migrate


…и можете посмотреть что же у вас получилось:

user@host:~/rails/myapp$ heroku open



Дружим Heroku и MySQL

Так сложилось, что для Rails более традиционной является PostgreSQL, эта СУБД является так же «родной» для Heroku. Но может так произойти, что вы используете другую популярную СУБД — MySQL. Тогда для корректной работы вашего приложения необходимо совершить еще несколько телодвижений. Не бойтесь, они достаточно просты!

Для достижения цели мы будем использовать дополнение ClearDB. Установим его и получим данные о выделенной нам БД:

user@host:~/rails/myapp$ heroku addons:add cleardb:ignite
-----> Adding cleardb to sharp-mountain-4005... done, v18 (free)

user@host:~/rails/myapp$ heroku config | grep CLEARDB_DATABASE_URL
CLEARDB_DATABASE_URL => mysql://adffdadf2341:adf4234@us-cdbr-east.cleardb.com/heroku_db?reconnect=true


Далее просто установим полученный адрес в качестве DATABASE_URL в Heroku, при необходимости изменив протокол на mysql2:

user@host:~/rails/myapp$ heroku config:set DATABASE_URL='mysql2://adffdadf2341:adf4234@us-cdbr-east.cleardb.com/heroku_db?reconnect=true'


Вот и все! На этом мое повествования заканчивается. Это мой первый пост на хабре, так что я буду очень благодарен за любые замечания по стилю и оформлению и, конечно же, я буду рад ответить на ваши вопросы в комментариях!
Теги:
Хабы:
Всего голосов 22: ↑12 и ↓10+2
Комментарии13

Публикации

Истории

Работа

Ruby on Rails
4 вакансии

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань