Здравствуй, Хабрахабр! Недавно у меня возникла необходимость развернуть свое Rails web-приложение на Heroku и я, к своему удивлению, не нашел почти ничего об этом на просторах не только Хабра, но и рунета в целом, поэтому я решил поделиться с вами своим опытом. Подробности о том, что и как я делал находятся под катом!
Сегодня я расскажу о том, как быстро и легко задеплоить свое приложение на Heroku. Если статья вызовет интерес я напишу продолжение о том, как быстро и удобно «перевести» приложение на свой домен и несколько советов о самом приложении, связанных с этим.
Первым делом вам будет необходимо зарегистрироваться на Hreoku. После того, как вы подтвердите свой e-mail нужно будет заполнить еще немного данных в своем профиле. В общем, ничего сложного, ничего необычного.
Первым делом необходимо установить ПО для командной строки от Heroku на свой компьютер, если вы еще этого не сделали. Для Ubuntu и Debian процесс установки заключается в выполнении следующей команды:
Для остальных дистрибутивов Linux — этой:
Честно говоря, я не знаю отличаются ли эти скрипты чем-либо. Пользователи же Windows и OS X могут скачать установочные файлы здесь.
После того, как весь необходимый инструментарий установлен, вам необходимо залогиниться в Heroku с командной строки:
Если вы еще не генерировали открытый ключ для SSH то вам будет предложено это сделать.
Если вы не используете систему контроля версий или используете, но отличную от git то вам придется создать локальный git-репозиторий на своем рабочем компьютере т.к. Heroku поддерживает только эту систему контроля версий. Все очень просто:
Чтобы ваше web-приложение корректно работало необходимо добавить
Обратите внимание, вы должны использовать эту же версию Ruby и у себя.
Если вы используете web-сервер отличный от WEBrick (Thin в моем случае), что, кстати, рекомендуется самим сервисом Heroku, то вам необходимо будет создать так же Procfile приблизительно следующего содержания:
Наша работа по запуску web-приложения практически подошла к концу, остались последние штрихи. Далее будет предполагаться что вы используете PostgreSQL в качестве СУБД. Если вы используете MySQL — немного ниже я рассказал о том, как подружить эту СУБД с Heroku. Итак, создадим приложение в Heroku:
Вообще говоря, вы можете и не указывать имя приложения при создании, тогда Heroku сама выдумает вам что-то вроде
Теперь ваше приложение доступно по адресу
Возможно вам понадобится сделать asset precompile чтобы все работало нормально (лично мне пришлось, если кто-то подскажет как заставить Heroku делать все в автоматическом режиме — буду благодарен):
После этого выполните все миграции…
…и можете посмотреть что же у вас получилось:
Так сложилось, что для Rails более традиционной является PostgreSQL, эта СУБД является так же «родной» для Heroku. Но может так произойти, что вы используете другую популярную СУБД — MySQL. Тогда для корректной работы вашего приложения необходимо совершить еще несколько телодвижений. Не бойтесь, они достаточно просты!
Для достижения цели мы будем использовать дополнение
Далее просто установим полученный адрес в качестве
Вот и все! На этом мое повествования заканчивается. Это мой первый пост на хабре, так что я буду очень благодарен за любые замечания по стилю и оформлению и, конечно же, я буду рад ответить на ваши вопросы в комментариях!
Сегодня я расскажу о том, как быстро и легко задеплоить свое приложение на 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'
Вот и все! На этом мое повествования заканчивается. Это мой первый пост на хабре, так что я буду очень благодарен за любые замечания по стилю и оформлению и, конечно же, я буду рад ответить на ваши вопросы в комментариях!