
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-worldO 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 bundlerEm seguida, instale todas as bibliotecas listadas no arquivo Gemfile usando o Bundler:
bundle installAdicionando 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 installConfigurando 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 .envna 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
endEntendendo 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 indexEm 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
  endConfigurando 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"
endCom 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 serverDepois, 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! 🚀
