Статьи

Начните с Синатры на Heroku

sinatraheroku В этом посте дается краткое объяснение начала работы с Ruby и веб-фреймворком Sinatra, развернутым в Heroku. Важно иметь базовые знания Ruby, включая установленную версию Ruby 1.9.2, Rubygems и Bundler.

Другие предпосылки, как показано ниже:

  • Базовые знания Git
  • Ваше приложение должно работать на Ruby (MRI) 1.9.2
  • Ваше приложение должно использовать Bundler
  • Аккаунт Heroku

Настройте свою локальную рабочую станцию

Чтобы получить доступ к клиенту командной строки Heroku, распределенному управлению версиями Git и Foreman, установите Heroku Toolbelt на локальную рабочую станцию.

Войдите в систему, используя свой адрес электронной почты и пароль, введя команду heroku в командной оболочке.

 $ heroku login Enter your Heroku credentials. Email: [email protected] Password: Could not find an existing public key. Would you like to generate one? [Yn] Generating new SSH public key. Uploading ssh public key /Users/adam/.ssh/id_rsa.pub 

Когда появится сообщение «Не удалось найти существующий открытый ключ», введите y чтобы создать новый ключ ssh . Эта клавиша позволяет отправить код в Heroku. Используя команду heroku , вы можете добавить открытый ключ в Heroku.

Начиная

Если у вас есть приложение Sinatra, не стесняйтесь его использовать. В противном случае, вот исходный файл «Learning Ruby on Heroku», который вы можете использовать:

web.rb

 require 'sinatra' get '/' do "Learning Ruby on Heroku" end 

Объявление зависимостей с Gemfile

Существование Gemfile говорит Heroku, что это приложение Ruby.

Gemfile

 source "https://rubygems.org" gem 'sinatra', '1.1.0' 

Запустите bundle install чтобы настроить пакет на локальной рабочей станции.

Объявление типов процессов с помощью Procfile

Форман использует текстовый файл с именем «Procfile» в корневом каталоге вашего приложения, чтобы объявить, какие процессы необходимо запустить.

Поскольку все приложения Sinatra совместимы с Rack, мы можем создать файл config.ru в корне каталога и указать Foreman использовать его.

Создайте файл config.ru :

 require 'my_app' run MyApp.new 

Запустите его, чтобы убедиться, что приложение запускается:

 rackup config.ru 

Вы можете обратиться к нашему 4-частному учебнику по Синатре, чтобы узнать больше .

Теперь его можно добавить в Procfile:

 web: bundle exec rackup config.ru -p $PORT 

Был объявлен отдельный тип процесса, web вместе с командой, необходимой для его выполнения. Здесь имеет значение название «сеть», поскольку в нем говорится, что этот тип процесса будет подключен к стеку маршрутизации HTTP Heroku и обрабатывать веб-трафик при реализации.

Теперь вы готовы начать работу с вашим приложением локально, используя Foreman (установленный в Toolbelt):

 $ foreman start 16:39:04 web.1 | started with pid 30728 18:49:43 web.1 | [2013-03-12 18:49:43] INFO WEBrick 1.3.1 18:49:43 web.1 | [2013-03-12 18:49:43] INFO ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux] 18:49:43 web.1 | [2013-03-12 18:49:43] INFO WEBrick::HTTPServer#start: pid=30728 port=5000 

Приложение будет отображаться на порту 5000. Убедитесь, что вы проверили, работает ли оно правильно с веб-браузером, затем Ctrl-C для выхода.

Поместите приложение в Git

Теперь у нас есть три основных элемента нашего приложения: типы процессов в Procfile , зависимости в Gemfile и источник в web.rb. Давайте сохраним ваше приложение в Git:

 $ git init $ git add . $ git commit -m "init" 

Развертывание приложения в Heroku

Создание приложения на Heroku:

 $ heroku create Creating blazing-galaxy-997... done, stack is cedar http://blazing-galaxy-997.herokuapp.com/ | [email protected]:blazing-galaxy-997.git Git remote heroku added 

Примечание. Название приложения Heroku будет отличаться от моего («blazing-galaxy-997»).

Развертывание кода

Чтобы передать наш код в Heroku, мы используем команду git push :

 $ git push heroku master Counting objects: 6, done. Delta compression using up to 4 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (6/6), 660 bytes, done. Total 6 (delta 0), reused 0 (delta 0) -----> Heroku receiving push -----> Ruby app detected -----> Installing dependencies using Bundler version 1.1 Checking for unresolved dependencies. Unresolved dependencies detected. Running: bundle install --without development:test --path vendor/bundle --deployment Fetching source index for https://rubygems.org/ Installing rack (1.2.2) Installing tilt (1.3) Installing sinatra (1.1.0) Using bundler (1.1) Your bundle is complete! It was installed into ./vendor/bundle -----> Discovering process types Procfile declares types -> web Default types for Ruby -> console, rake -----> Compiled slug size is 6.3MB -----> Launching... done, v4 http://blazing-galaxy-997.herokuapp.com deployed to Heroku To [email protected]:blazing-galaxy-997.git * [new branch] master -> master 

Обратите внимание, что Heroku сообщает нам, что наш web процесс обнаружен в нашем Procfile. Все работает как надо.

Управление вашим приложением

Теперь вы развернули свой код в Heroku. Следующий шаг — выполнить тип процесса, дав команду Heroku выполнить соответствующую команду в «dyno» — фундаментальном рабочем процессе в Heroku.

Вы можете масштабировать свое приложение, добавляя больше dyno для типа процесса. Вот пример того, чтобы убедиться, что у вас есть один dyno, выполняющий тип web процесса:

 $ heroku ps:scale web=1 

Чтобы проверить состояние heroku ps приложения, используйте команду heroku ps которая показывает запущенные heroku ps вашего приложения.

 $ heroku ps === web: `bundle exec ruby web.rb -p $PORT` web.1: up for 9m 

Это показывает, что 1 дин приложения работает. С heroku open командой heroku open вы можете зайти в свое приложение.

 $ heroku open Opening blazing-galaxy-997... done 

Масштабирование

Ваше первое веб-приложение для приложения Heroku бесплатно. Однако, если вы не масштабируете сверх этого свободного динамо, Heroku оставляет за собой право убить динамо после периода неиспользования. Вы можете избежать этого, добавив второй dyno:

 $ heroku ps:scale web=2 

Вы можете получить максимум 750 динамо-часов бесплатно для каждого приложения. Убедитесь, что у вас не заканчивается бесплатное ежемесячное пособие. Чтобы уменьшить масштаб до одного динамо:

 $ heroku ps:scale web=1 

Проверка журнала

Heroku облегчает просмотр файлов журналов с помощью команды heroku logs :

 $ heroku logs 2013-03-13T04:10:49+00:00 heroku[web.1]: Starting process with command `bundle exec ruby web.rb -p 25410` 2013-03-13T04:10:50+00:00 app[web.1]: [2013-03-13 04:10:50] INFO WEBrick 1.3.1 2013-03-13T04:10:50+00:00 app[web.1]: [2013-03-13 04:10:50] INFO ruby 1.9.2 (2011-07-09) [x86_64-linux] 2013-03-13T04:10:50+00:00 app[web.1]: [2013-03-13 04:10:50] INFO WEBrick::HTTPServer#start: pid=2 port=25410 

Приставка

С помощью команды heroku run вы можете запускать команды в одноразовой записи, например, скрипты, которые нужно просто выполнить один раз. Используя его, вы можете запустить интерактивную оболочку Ruby ( bundle exec irb ), связанную с локальным терминалом, для тестирования в среде приложения:

 $ heroku run console Running `console` attached to terminal... up, ps.1 irb(main):001:0> 

irb по умолчанию загружает только стандартную библиотеку Ruby. Из него вы можете require некоторые файлы вашего приложения. Или это можно сделать из командной строки:

 $ heroku run console -r ./web 

Грабли

Как и в случае с консолью, вы можете запустить rake в одноразовой записи:

 $ heroku run rake db:migrate 

Как использовать базу данных SQL

Для нашего примера приложения вам не нужно использовать базу данных SQL, но большинству «настоящих» приложений потребуется некоторое постоянство. Чтобы добавить бесплатное приложение PostgreSQL для разработки вашего приложения:

 $ heroku addons:add heroku-postgresql:dev 

Вам нужно будет добавить гем Postgres в ваше приложение, добавив строку в ваш Gemfile как показано ниже:

 gem 'pg' 

и повторное развертывание вашего приложения.

Чтобы повторно развернуть приложение после внесения изменений:

 git commit -am "Added pg gem" git push heroku master 

Эта статья действительно только раскрывает поверхность развертывания приложения Sinatra в Heroku. Следующие шаги могут быть:

  • Сделать приложение сохранить состояние в Postgres
  • Добавьте немного JavaScript / CSS
  • Изучите бесконечную коллекцию дополнений Heroku, чтобы узнать, какие услуги вы можете использовать для улучшения своего приложения.

Удачи!