Colocando sua aplicação online com Heroku

Criado por Terence Lee, @hone02

Instale o Heroku

Siga os passos de “Introduction” e “Set up” do guia Getting Started on Heroku with Ruby (em inglês, mas é tranquilo de seguir :D) para se cadasrar, instalar o Heroku CLI e logar.

Treinadores: Fale sobre os benefícios de fazer deploy no Heroku ao invés de outro serviços tradicionais.

Preparando sua app

Controle de versão

Nós precisaremos colocar nosso código em algum sistema de controle de versão. Você pode fazer isso rodando o seguinte no terminal:

git init
git add .
git commit -m "Commit inicial"

Treinadores: É um bom momento pra falar de sistemas de controle de versão e git.

Atualizando nosso banco de dados

Primeiramente, a gente precisa fazer com que nosso banco de dados funcione no Heroku, que usa um banco de dados diferente. Troque a seguinte linha na Gemfile:

gem 'sqlite3'

para

group :development do
  gem 'sqlite3'
end
group :production do
  gem 'pg'
end

Rode bundle install --without production para instalar as novas dependências.

Treinadores: Vocês pode falar sobre SGBDs aqui a diferença entre eles, e incluir alguns detalhes sobre a dependência do Heroku ser do PostgreSQL.

Fazendo deploy da sua app

Criando a app no Heroku

Precisamos criar nossa aplicação Herku escrevendo heroku create no Terminal. Vamos ver algo parecido com isso: `

Creating app... done, ⬢ young-reaches-87845
https://young-reaches-87845.herokuapp.com/ | https://git.heroku.com/young-reaches-87845.git

Nesse caso “young-reaches-87845” é o nome da sua app. Mas vai ser diferente pra você :)

Subindo o código

Agora precisamos subir o nosso código pro Heroku escrevendo git push heroku master. Você vai ver algo parecido na sua tela:

Counting objects: 115, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (97/97), done.
Writing objects: 100% (115/115), 25.62 KiB | 0 bytes/s, done.
Total 115 (delta 10), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.2.4
remote: -----> Installing dependencies using bundler 1.11.2
remote:        Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
remote:        Fetching gem metadata from https://rubygems.org/..........
remote:        Fetching version metadata from https://rubygems.org/...
remote:        Fetching dependency metadata from https://rubygems.org/..
remote:        Installing concurrent-ruby 1.0.2
...
remote: -----> Launching...
remote:        Released v5
remote:        https://young-reaches-87845.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/young-reaches-87845.git
 * [new branch]      master -> master

Você sabe que o código já terminou de subir quando você vê o “Launching…” como no exemplo acima.

Migrar o banco de dados

Agora precisamos migrar nosso banco de dados como fizemos localmente:

heroku run rake db:migrate

Quando esse comando terminar, você pode ir para a aplicação na URL dada. Pra esse exemplo, você pode ir para https://young-reaches-87845.herokuapp.com/. Você também pode digitar heroku open no terminal para abrir a página.

Notas finais

A plataforma Heroku tem suas peculiaridades. Aplicações rodadas no Heroku vivem num ambiente um pouco diferente, no qual qualquer arquivo criado pela sua aplicação vai desaparecer caso ela reinicie (por exemplo, quando você sobe uma versão nova). Os únicos dados que persistem estão dentro da sua base de dados. Leia sobre Ephemeral filesystem (em inglês) na documentação do Heroku.

No tutorial da aplicação tutorial a funcionalidade de anexar um arquivo é adicionada, o que resulta em arquivos sendo escritos na sua pasta public/uploads. Você pode entender melhor como Heroku lida com isso fazendo os seguintes passos:

  1. Abra sua aplicação com heroku open
  2. Crie uma nova Idéia com uma nova imagem
  3. Reinicie a aplicação com heroku restart
  4. Volte para a sua Idéia e atualize a página (F5). A imagem não estará mais visível.
Como resolver

Obviamente isso não parece ser bom se você está rodando uma aplicação real, mas existem várias formas de resolver isso que são usadas por vários websites.

A mais comum é usar um host externo como o Amazon S3 (Simple Storage Service) ou Rackspace CloudFiles. Esses serviços provêem (por um custo baixo - normalmente menos de $0.10 por GB) um armazenamento “na cloud” (significa que os arquivos podem estar potencialmente em qualquer lugar) que sua aplicação pode usar como um armazenamento persistente.

Essa funcionalide está um pouco fora de escopo pra esse tutorial, mas existem recursos disponíveis nos seguintes links (em inglês) caso você se interesse:

Anterior   Próximo