Загрузка...

Ruby & Rails: веб-разработка с удовольствием

Ruby on Rails — фреймворк для создания веб-приложений. Является открытым программным обеспечением (лицензия MIT). Здесь мы обсуждаем новости RoR, делимся учебными материалами и интересными находками С RoR даже сложные веб-приложения могут быть написаны за считанные дни. Это действительно разработка с удовольствием!
     

RoR: Переходим на Herokugarden

08.03.09, 15:08
Автор Иван

В данной статье я хотел бы рассказать о замечательном сервисе для Ruby on Rails разработчиков — Heroku, а так же поделиться своими впечатлениями о нем. Кроме того вкратце объясню, как перенести ваше рельсовое приложение на этот заманчивый «облачный» хостинг.

О чем речь

Те, кто непосредственно сталкивался с деплойментом рельсовых приложений, наверное согласятся со мной, что это не самое приятное занятие. Если речь идет о небольших задачах, то, как правило, можно ограничиться возможностями виртуального сервера VPS или даже виртуального хостинга. В первом случае вам видимо придется настраивать все с нуля (честно признаюсь, не доводилось иметь дело с ними), и хотя в конечном счете вы получите именно то, что хотите, время и силы вложить все же потребуется. Что касается виртуальных хостингов, то в данном случае все еще хуже из-за отсутствия гибкости. Хостеры предлагают совершенно различные варианты развертки приложений на своих серверах. Кто-то предлагает воспользоваться кластером на основе Mongrel (например, 1gb.ru), кто-то - использовать mod_ruby (например, hostfabrica.ru). Кроме того, у каждого есть свои причуды с тем, что, где и как должно лежать на виртуальном хосте для того, чтобы вся эта каша заработала. Тут без качественной техпомощи бывает и не обойтись, и порой приходится тратить много времени только лишь на то, чтобы выяснить, что же подразумевал хостер, написав некую строчку в своем HOWTO. И раз уж зашла речь о техпомощи, то просто не могу не сказать пару добрых слов в адрес «одного гигабайта» (1gb.ru) — ребята круглые сутки готовы вам оказать ценную и оперативную помощь, за что им большое человеческое спасибо! Но речь не об этом, продолжим. Вопрос с деплойментом, как видите, весьма неоднозначен. К счастью прогресс не стоит на месте.

Недавнее открытие

Относительно недавно наша команда открыла для себя такой замечательный проект как Heroku. Этот стартап был запущен еще в октябре 2007 года небезызвестным Y Combinator. С тех пор много воды утекло, и проект не стоял на месте, а динамично развивался, предлагая все более качественный и стабильный сервис. К сожалению, познакомились мы с ним не так рано, как этого бы хотелось, поэтому подробнее рассказать о его развитии ничего не могу, но уверен, что немножко погуглив и заглянув на официальный сайт, можно найти исчерпывающую информацию. Итак, что же такое Heroku для разработчика на Ruby on Rails? Во-первых, Heroku предлагает среду для создания и разработки рельсовых приложений. Выглядит она следующим образом:

Находясь в любой точке земного шара с выходом в интернет, вы без труда сможете подправить свое приложение без лишних хлопот. Слева находится дерево файлов приложения, справа — окно редактора исходного кода. Так же можно получить доступ к консоли приложения, что тоже очень удобно. От себя скажу, что навряд ли я бы стал таким способом разрабатывать какие-либо приложение с нуля, но вот зайти и исправить мелки баг — запросто. Во-вторых, Heroku - это еще и полноценный «облачный» хостинг, основанный на Amazon Web Services, теоретически предоставляющий вашему приложению ресурсов ровно столько, сколько ему нужно для комфортной работы. За подробностями по архитектуре можно обратиться вот сюда.

Поехали

Итак, приступим-с. Управлять приложением из-под Heroku проще некуда — минимум настроек и максимум юзабилити. Заходим, создаем аккаунт и начинаем наслаждаться... Сразу оговорюсь, что с недавнего времени, а точнее с середины января, проект был перенесен с heroku.com на домен herokugarden.com в связи с расширением производственных возможностей сервиса. Heroku все находится в стадии бета, поэтому доступ к нему несколько ограничен, возможно, придется чуток подождать до получения приглашения после подачи заявки, хотя у нас это заняло не более пары часов. После того, как вы успешно вошли под своим пользователем, все, что нужно сделать для создания приложения, — это всего навсего нажать на одну кнопку «Create New App».

И все, действительно все. Чистое приложение на последней версии рельсов (на момент написания статьи 2.2.2) уже задеплоено и полноценно функционирует. Вы увидите немножко модифицированную стандартную страничку index.html рельсового приложения. На ней будут ссылки на редактирование кода приложения во встроенном редакторе и на импортирование уже готового приложения с подробным описанием того, как подготавливается соответствующий архив импорта. Я последовал как раз второй ссылке и, исключив из моего приложения папки log, tmp и .git и подготовив зазипованный архив, залил его на Heroku. И о чудо! Приложение запустилось! Самое поразительное, что я даже и не задумывался над тем, как организовать доступ к базе данных. Где она располагается? Какое ее имя? А пользователь и пароль? Раньше на все эти вопросы приходилось искать ответы — хостер в явном виде жестко указывал эти параметры. Обычно нужно было заходить в какую-нибудь панель управления, дальше искать нечто вроде «Управление БД», там создавать новую базу, при этом к ее имени приписывался еще какой-нибудь префикс, то же касается и имени пользователя. Плюс бывало, что БД располагалась на другом сервере, и этот факт тоже нужно было учитывать. Все это конечно не так страшно, но по сравнению с тем, как это организовано на Heroku, просто жуть. Идем дальше. По умолчанию, наше приложение было создано с мало о чем говорящим именем, что-то вроде untitled-ed0264, и соответственно мы получили доменное имя untitled-ed0264.herokugarden.com. Попытаемся это исправить. Снизу у нашего приложения висит панель управления от Heroku, позволяющая перейти к окну редактирования и настроек приложения. Ей и воспользуемся, жмем «app settings». Снова наблюдаем простой, лаконичный пользовательский интерфейс панели управления, ничего лишнего:

Здесь можно поменять имя приложения, сделать его открытым или закрытым (позволяет делать приложение доступным не только его девелоперам, зашедшим под своими аккаунтами в Heroku, но и всем желающим по соответствующему доменному имени), пригласить еще людей в проект в качестве простых наблюдателей или разработчиков, присвоить произвольное доменное имя (об этом чуть позже), а так же поменять окружение с Development на Production и обратно. Также сверху можно заметить несколько дополнительных вкладочек, на которых располагаются не менее полезные функции. Вкладка «Import & Export» предлагает ту самую загрузку приложения из архива, которую мы делали в самом начале, а так же позволяет скачать приложение с сервера Heroku на ваш локальный диск. Причем это можно сделать даже с данными, хранящимися в БД. Они будут экспортированы в формате YML. Для работы с ним советую установить в ваше приложение плагин YamlDB. На самом деле очень удобный плагин. Предположим, на вашем компьютере уже заполнена база данных. Как ее содержимое перенести на Heroku? Очень просто! Ставим плагин, выполняем `rake db:data:dump` и в папке db появляется файл data.yml. Если этот файл попадет в импортируемый архив, то Heroku автоматически его подхватит и восстановит базу данных. Неправда ли, просто чудо?! Аналогично и вы можете слить data.yml с Heroku через ту вкладочку, положить в нужное место и выполнить `rake db:data:load`, и все, у вас актуальная версия БД. На вкладке «Snapshots» можно делать бэкапы приложения и данных, восстанавливать при необходимости. Вкладка «Other» показывает статистику по приложению — количество используемых ресурсов по коду и данным. Тут же можно заметить, что все же есть ограничение по 40 Mb на код и данные, видимо все же придется потесниться, или воспользоваться ссылкой ниже и попросить еще. Здесь располагается заведомо бесполезная кнопка удаления приложения. Пару слов хотелось бы еще сказать по поводу висящей снизу нашего приложения панели управления от Heroku, ее можно убрать создав в папке config файл heroku.yml следующего содержания:

toolbar_colaborators: true

toolbar_public: false

Таким образом, для внешних пользователей ее не будет видно.

Доменное имя

Если у вас есть зарегистрированное доменное имя, например, parapapam.ru, и вы хотели бы его использовать для вашего приложения, то тут придется немного потрудиться. Для начала нужно убедиться, что ваш ДНС сервер позволяет вам настраивать записи типа CNAME (перенаправление) для вашего доменного имени. Как советует Heroku, запись CNAME должна указывать на herokugarden.com. Наш не поддерживал, и после непродолжительных поисков халявных ДНС сервисов, отобрано было только два: freedns.afraid.org и zoneedit.com. Оба позволяют сделать как раз то, что нужно - убираем все ДНС записи, оставляем только CNAME (www.parapapam.ru → herokugarden.com). Кроме того, делаем еще и перенаправление с parapapam.ru на www.parapapam.ru (это уже не CNAME, а дополнительная услуга ДНС сервиса), в противном случае у нас были проблемы с заходом на сайт то ли без www, то ли с ним, причем они проявлялись на машине с виндой, на линуховой проблем не было (кто объяснит?). Второй ДНС сервис (zoneedit.com) еще предоставляет перенаправление электронной почты, этому мы остановились на нем, очень удобно и платить не надо. Ну и в конце концов нужно сходить к вашему регистратору и попросить его поменять ДНС на новые, а на Heroku вместо «Custom Domain Name» написать www.parapapam.ru. Подождав пару деньков (пока там все ДНС сервера получат извещение о том, что у нашего домена сменились ДНС...) получаем наше чудесное «облачное» приложение!

Что еще?

Зайдя на сайт Heroku можно найти еще множество полезной информации. Например, там выложена целая куча видео роликов, о том, как и что делать. Рассказано, как можно управлять приложением с использованием джема herokugarden (есть еще heroku, ну я так понял, это для старого хоста) и распределенной системой версионного контроля — непревзойденным мерзавцем git.

Комментарии

пробывал heroku, но он как то не завелся с первого раза и я закинул, а вот сейчас попробывал herokugarden, все заработало с первого раза. довольный как слон :) спасабо, за статтю

Да, спасибо за статью. Чувствую, что пригодится скоро

Войдите, чтобы оставить комментарий