четвер, 17 лютого 2011 р.

Використання Sinatra з Bundler для розгортання додатку на Heroku

Хотів почати із зачаровуючого та інтригуючого заголовку. І, безумовно, заголовок повинен відповідати вмісту статі.
Веб-фреймворк Sinatra не потребує повторного представлення. Я писав про нього раніше у цьому блозі. В цій статті мова піде про два інші інструменти згадані у заголовку.

Що таке Bundler?
Це менеджер для управління залежностями gem'ів в ruby додатках. Ця утиліта дозволяє легко встановлювати необхідні gem'и для вашої програми, при цьому зовсім не залежати від встановлених в системі.
Встановлюємо цю утиліту як будь-який інший gem:
$ gem install bundler

Для використання Bundler з Sinatra, потрібно зробити дві речі.
По-перше, створити Gemfile. У цьому файлі задаються всі необхідні залежності gem'ів.
source "http://rubygems.org"
gem 'sinatra'
Спершу задається ресурс звідки за замовчуванням будуть встановлюватися gem'и. Ви легко можете його замінити, наприклад, на gems.github.com або додати стільки ресурсів скільки вам потрібно:
source 'http://gemcutter.org'
source 'http://gems.github.com'
source 'http://gems.rubyforge.org'
Далі вже йде список gem'ім, які потрібні для роботи програми.
Якщо потрібна конкретна версія gem'а, то можна задати її версію:
gem "sinatra", "1.1.1"
gem "sinatra", ">=1.0.0"

Другий крок, налаштувати файл config.ru.
require 'bundler'

Bundler.require

require './myapp'

run MyApp

І власне myapp.rb:
class MyApp < Sinatra::Base
  get '/' do
    'Hello world!'
  end
end

Далі потрібно виконати команду:
$ bundle install
Ця команда вирішить всі залежності та встановить відсутні gem'и. При цьому якщо виконати:
$ gem list
то ви там не побачите gem'и які були встановлені за допомогою bundler'а. Якщо потрібний gem вже встановлений в системі, то для нього буде створене посилання.
Переглянути список встановлених gem'ів можна за допомогою команди:
$ bundle show
Після кожної зміни файлу Gemfile, потрібно виконати команду install.

Далі переконайтеся, що Rack встановлений, і виконайте наступну команду в кореневому каталозі:
$ rackup
Додаток повинен бути запущений і працювати локально на порті 9292.

Що таке Heroku?
За словами самих розробників, це платформа хмарних обчислень (cloud computing) PaaS (Platform as a service) - нове слово в побудові та розгортанні веб-орієнтованих додатків на основі Rack, написаних на мові Ruby. Дозволяє сконцентруватися на розробці і не витрачати зайвий час на налаштування, розгортання і масштабування додатку.
Heroku заснований на Amazon Web Services, і теоретично готовий надати вашому додатку ресурсів рівно стільки, скільки йому потрібно для комфортної роботи. За відповідну плату.

Встановлюємо утиліту для роботи з сервісом Heroku:
$ gem install heroku

Для розгортання вашого додатку на Heroku, виконайте наступні команди:
git init
git add .
git commit -m 'Initial version of MyApp'
heroku create
git push heroku master

Якщо на останній команді отримаєте помилку:
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
виконайте наступну команду:
$ heroku keys:add ~/.ssh/id_rsa.pub

1 коментар:

Анонім сказав...

Зачем использовать config.ru если есть Gemfile, который именно для этого и предназначен ?

-----> Heroku receiving push
-----> Sinatra app detected
-----> Gemfile detected, running Bundler version 1.0.7
Unresolved dependencies detected; Installing...