Integrar Ruby on Rails a um PostgreSQL gratuito

Ilustração digital com ícones do Ruby on Rails e Supabase sobre um fundo em gradiente vermelho e laranja, representando a integração com banco de dados PostgreSQL.

Como integrar seu projeto Ruby on Rails a um banco de dados PostgreSQL gratuito usando Supabase

Se você está acompanhando nossa série sobre como construir uma aplicação web com Ruby on Rails usando a API da NASA, chegou a hora de dar um passo fundamental: integrar seu projeto a um banco de dados PostgreSQL real. Neste artigo, vamos usar o Supabase, uma plataforma moderna, gratuita e com dashboard completo para gerenciar bancos de dados na nuvem.

Perdeu a parte anterior? Volte e veja como começamos: Consultando uma API com Ruby on Rails.

Por que usar o Supabase?

Supabase é uma alternativa open-source ao Firebase, com foco em desenvolvedores que precisam de banco de dados, autenticação, API e storage — tudo pronto para produção. Neste projeto, vamos usar apenas o PostgreSQL.

  • Plano gratuito com 500MB de armazenamento de banco de dados
  • Interface gráfica para rodar queries SQL e gerenciar tabelas
  • Fornece string de conexão compatível com Rails
  • Possui recursos avançados como autenticação e APIs REST

Passo a passo: criando o banco no Supabase

  1. Acesse https://supabase.com e crie uma conta (você pode usar GitHub).
  2. Clique em “New Project” e dê um nome ao seu projeto.
  3. Escolha uma senha para o banco e uma região (como US East ou South America).
  4. Após a criação, clique na aba Connect para copiar a connection string:
postgresql://postgres:[YOUR-PASSWORD]@db.seuprojeto.supabase.co:5432/postgres

Instalando as gems necessárias

Antes de conectar ao banco, adicione as seguintes gems ao seu Gemfile:

gem 'activerecord'
gem 'pg'

Depois, execute o comando:

bundle install

Step by Step: Configurar PostgreSQL no Rails

  1. Verifique se o projeto tem suporte a ActiveRecord
    No arquivo config/application.rb, confirme se a linha abaixo está presente e descomentada:
require "active_record/railtie"

Se estiver comentada ou ausente, adicione acima de Bundler.require.

  1. Configure o banco no Gemfile
    Garanta que a gem pg esteja incluída:
gem 'pg'

Depois rode:

bundle install
  1. Crie ou edite o arquivo config/database.yml:
default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  timeout: 5000
  username: <%= ENV['PG_USER'] %>
  password: <%= ENV['PG_PASSWORD'] %>
  host: <%= ENV['PG_HOST'] %>
  port: <%= ENV['PG_PORT'] %>
  database: <%= ENV['PG_DATABASE'] %>

development:
  <<: *default

test:
  <<: *default
  database: <%= ENV['PG_DATABASE_TEST'] || "#{ENV['PG_DATABASE']}_test" %>
  1. Crie o arquivo .env na raiz do projeto:
PG_USER=postgres
PG_PASSWORD=sua_senha
PG_HOST=host-do-supabase-ou-localhost
PG_PORT=5432
PG_DATABASE=postgres

Use dotenv-rails se quiser carregar essas variáveis automaticamente em ambiente de desenvolvimento.

  1. Configure PostgreSQL no macOS (Apple Silicon):
brew install libpq
brew link --force libpq
echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

Se necessário, rode também:

bundle config build.pg --with-pg-config=/opt/homebrew/opt/libpq/bin/pg_config
bundle install
  1. Crie e migre o banco:
bundle exec rails db:create db:migrate

Testando a conexão com um scaffold simples

Para garantir que está tudo funcionando corretamente, crie um scaffold básico:

rails generate scaffold Note title:string body:text
rails db:migrate

Depois disso, acesse http://localhost:3000/notes no navegador e experimente adicionar registros. Se tudo estiver certo, a conexão com o banco está funcionando perfeitamente.

Conclusão

Integrar sua aplicação Ruby on Rails com o Supabase é um grande passo rumo a um projeto profissional. Agora que você conta com um banco de dados real, é possível implementar funcionalidades robustas como autenticação, favoritos e persistência completa.

Se surgirem dúvidas ou sugestões, compartilhe nos comentários. Vamos evoluir juntos 🚀

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *