Como iniciar um projeto Ruby on Rails do zero a partir de uma repository no GitHub
No artigo anterior, conhecemos a estrutura de
pastas do Ruby on Rails e entendemos a importância do padrão MVC (Model-View-Controller) no desenvolvimento web com essa
framework. Agora, nesta terceira parte da série, vamos dar os primeiros passos práticos: clonar o projeto base do
GitHub, instalar as dependências, configurar variáveis de ambiente, consumir uma API real e visualizar dados
astronômicos da NASA diretamente no navegador.
Clonando a repository inicial
Para começar, acesse o terminal e clone a repository pública com o seguinte comando:
git clone https://github.com/vchopDev/astro-explorer-ror.git
cd astro-explorer-ror
git checkout chapter-1-setup-inicial-e-hello-world
O projeto já está configurado com a estrutura básica do Rails, o que significa que você não precisa executar
rails new
manualmente. Além disso, o branch chapter-1-setup-inicial-e-hello-world
representa
exatamente o ponto inicial da jornada e desse capitolo.
Instalando as dependências do projeto
Antes de instalar as gems, certifique-se de que o Bundler está instalado:
gem install bundler
Em seguida, instale todas as bibliotecas listadas no arquivo Gemfile
usando o Bundler:
bundle install
Adicionando a gem HTTParty
Para buscar dados da internet, vamos usar a gem httparty
. Ela facilita muito o trabalho com requisições
HTTP. Assim, adicione ao Gemfile
a seguinte linha:
gem 'httparty'
Depois, execute novamente:
bundle install
Configurando variáveis de ambiente com dotenv
No Ruby on Rails, o equivalente ao arquivo .env
(comum em projetos Node.js) pode ser gerenciado com a gem
dotenv-rails
. Isso permite manter sua chave da NASA protegida e fora do código.
-
- Adicione ao
Gemfile
:
- Adicione ao
gem 'dotenv-rails', groups: [:development, :test]
-
- Crie o arquivo
.env
na raiz do projeto:
- Crie o arquivo
touch .env
-
- Adicione sua chave da NASA (ou use a demo):
NASA_API_KEY=DEMO_KEY
-
- Carregue a variável no serviço com:
ENV['NASA_API_KEY']
Importante: adicione .env
ao seu .gitignore
!
Obtendo sua chave da API da NASA
Para obter uma chave personalizada, acesse https://api.nasa.gov e preencha o formulário com seu nome e e-mail. Você receberá uma chave API
válida por e-mail, ideal para uso em produção ou projetos maiores. Entretanto, se preferir começar com testes, a
DEMO_KEY
funciona bem, embora tenha limite de requisições.
Criando um serviço para a API da NASA
Agora vamos criar uma classe que fará a comunicação com a API da NASA. Crie o arquivo
app/services/nasa_api_service.rb
:
require 'httparty'
class NasaApiService
include HTTParty
base_uri 'https://api.nasa.gov/planetary'
def initialize(api_key = ENV['NASA_API_KEY'] || 'DEMO_KEY')
@api_key = api_key
end
def fetch_apod
self.class.get('/apod', query: { api_key: @api_key })
end
end
Entendendo a sintaxe da classe Ruby
Em Ruby, uma classe é definida com a palavra-chave class
, seguida do nome da classe em CamelCase. Dentro dela, usamos def
para criar métodos. O método initialize
funciona como o construtor: é executado automaticamente quando chamamos NasaApiService.new
.
Note também o uso de @api_key
: o símbolo @
indica que essa é uma variável de instância, ou seja, ela pertence àquele objeto em particular. Já o uso de self.class.get
chama o método get
da classe HTTParty
, que foi incluída com include HTTParty
. Isso é uma forma de herdar funcionalidades de outro módulo — algo muito comum em Ruby.
O que faz o include HTTParty
?
Essa linha faz com que nossa classe tenha acesso a métodos úteis do módulo HTTParty
, como get
, post
, base_uri
e outros.
No Ruby, usar include
dentro de uma classe é uma forma de misturar (mixin) funcionalidades de outro módulo no escopo da instância. Ou seja, todos os métodos definidos no módulo HTTParty
passam a estar disponíveis dentro da nossa classe como se fossem dela.
Veja o exemplo abaixo:
include HTTParty
base_uri 'https://api.nasa.gov/planetary'
Isso define a URL base para todas as chamadas HTTP feitas com self.class.get(...)
. Assim, quando usamos get('/apod')
, a requisição é feita para https://api.nasa.gov/planetary/apod
.
Isso torna o código mais limpo e organizado, separando a responsabilidade da requisição em uma classe isolada.
Ainda que seja uma linguagem orientada a objetos, Ruby é bastante enxuto e expressivo. Por isso, mesmo para iniciantes, o código costuma ser mais fácil de ler — mesmo que você nunca tenha usado Ruby antes.
Gerando o controller e criando a lógica
rails generate controller Apod index
Em app/controllers/apod_controller.rb
, substitua por:
require Rails.root.join("app/services/nasa_api_service.rb")
class ApodController < ApplicationController
def index
service = NasaApiService.new
@apod = service.fetch_apod.parsed_response
end
end
Configurando a rota principal
Abra o arquivo config/routes.rb
. Por padrão, ele já vem com algumas linhas de comentário e exemplos. Nesse caso, não é necessário apagar tudo — basta adicionar a linha da rota principal dentro do bloco Rails.application.routes.draw do
:
Rails.application.routes.draw do
root "apod#index"
end
Com isso, definimos que a rota raiz da aplicação (ou seja, /
) será direcionada para a action index
do controller ApodController
.
Criando a view
Quando executamos o comando rails generate controller Apod index
, o Rails automaticamente cria o arquivo app/views/apod/index.html.erb
, correspondente à action que declaramos no controller. Esse arquivo é onde vamos escrever o HTML que será renderizado no navegador.
Agora, edite o conteúdo do arquivo e adicione o seguinte:
<h1><%= @apod['title'] %></h1>
<p><%= @apod['date'] %></p>
<p><%= @apod['explanation'] %></p>
<% if @apod['media_type'] == 'image' %>
<img src="<%= @apod['url'] %>" alt="Imagem do dia da NASA" style="max-width:100%;">
<% else %>
<p>Conteúdo não é uma imagem (media type: <%= @apod['media_type'] %>).</p>
<% end %>
Esse código mistura HTML com Ruby (via .erb
) para exibir o conteúdo da imagem astronômica do dia retornado pela API. Usamos <%= %>
para imprimir valores e <% %>
para executar condições sem imprimir.
Rodando o servidor
rails server
Depois, acesse http://localhost:3000
para ver a imagem do dia exibida pela API da NASA!
Conclusão
Com poucos arquivos e comandos, criamos uma aplicação web funcional usando Ruby on Rails. Reforçamos o conceito de MVC —
com Model, View e Controller bem separados — e aprendemos a consumir
uma API externa com segurança. No próximo capítulo, vamos adicionar favoritos e interações mais avançadas.
Ficou com dúvidas? Quer sugerir algo ou compartilhar seu progresso? Deixe um comentário no blog! 🚀