Здравствуй! Недавно у меня возникла необходимость развернуть свое 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
.
Теперь ваше приложение доступно по адресу http://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'
Вот и все! На этом мое повествования заканчивается. Это мой первый пост на хабре, так что я буду очень благодарен за любые замечания по стилю и оформлению и, конечно же, я буду рад ответить на ваши вопросы в комментариях!
Автор: supernapalm