[Из песочницы] Развертываем свой сайт на Heroku
Здравствуй, Хабрахабр! Недавно у меня возникла необходимость развернуть свое 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' Вот и все! На этом мое повествования заканчивается. Это мой первый пост на хабре, так что я буду очень благодарен за любые замечания по стилю и оформлению и, конечно же, я буду рад ответить на ваши вопросы в комментариях!