Aplicacao de anotacoes full-stack com Rails 8 + Vue 3, API JSON e deploy automatizado.
- Visao Geral
- Pre-requisitos
- Como Rodar Sem Docker
- Como Rodar Com Docker Compose
- Scripts de Desenvolvimento
- Documentacao da API
- Testes e Qualidade
- Como Contribuir
- CI/CD
- Build de Producao com Docker
- Banco de Dados
- Troubleshooting
- Backend: Ruby on Rails 8.1
- Frontend: Vue 3 (Composition API) + vue-i18n
- Build frontend: esbuild
- CSS: Tailwind CSS v4
- Banco: SQLite
- Paginacao: Pagy Countless
- Serializacao JSON: Jbuilder
- Testes backend: RSpec
- Testes frontend: Vitest
- Qualidade e seguranca: RuboCop, Brakeman, bundler-audit, yarn audit
- Ruby
4.0.1 - Bun (com lockfile
bun.lock) - SQLite 3
- Docker
- Docker Compose
bin/setupEsse comando:
- instala gems
- instala dependencias JS com Bun
- prepara banco de dados
- inicia o ambiente de desenvolvimento
bin/setup --skip-serverbin/devAplicacao local:
http://localhost:3000
docker compose up --buildAplicacao local:
http://localhost:3000
# parar containers
docker compose down
# parar e remover volumes
docker compose down -v
# abrir shell no container
docker compose exec app bash
# rodar testes frontend
docker compose exec app bun run test:frontend
# rodar testes backend
docker compose exec app bundle exec rspec
# preparar banco
docker compose exec app bin/rails db:prepareProcessos iniciados por bin/dev:
- Rails server em
0.0.0.0:3000 - Build JS em watch
- Build CSS em watch
Frontend:
bun run build
bun run build:css
bun run test:frontend
bun run test:frontend:coverageBackend:
bundle exec rspec
bundle exec rspec spec/requests/notes_spec.rb
bin/rubocop
bin/brakeman --no-pager
bin/bundler-auditA documentacao completa da API esta em docs/api.md.
Rodar pipeline local completa:
bin/ciEtapas da pipeline local:
- setup do projeto
- RuboCop
- bundler-audit
- yarn audit (moderate)
- Brakeman
- RSpec
- Vitest
- seed/replant em ambiente de teste
git checkout -b feat/minha-mudancabin/ciPadrao sugerido:
feat: ...fix: ...docs: ...chore: ...test: ...
- descreva o contexto da mudanca
- liste o que foi alterado
- inclua evidencias (logs, prints ou resultados de testes)
- apos merge na
main, o CI roda automaticamente - o CD pode exigir aprovacao manual no environment
production
Gatilhos:
- push em
main - pull requests
Jobs:
scan_ruby: Brakeman + bundler-auditlint: RuboCoptest: RSpec + testes frontend com Bun
Gatilhos:
- push em
main - execucao manual (
workflow_dispatch)
Fluxo:
- Build da imagem Docker de producao
- Push da imagem para GHCR
- Deploy da imagem no CapRover
O job usa environment: production, entao pode exigir aprovacao manual quando a protecao de environment estiver ativa no GitHub.
Segredos necessarios:
CAPROVER_SERVERCAPROVER_APP_NAMECAPROVER_APP_TOKEN
O projeto tambem possui um workflow de release automatizado em .github/workflows/release.yml.
Gatilho:
- push de tags no padrao
v*.*.*
Exemplo:
git tag v1.0.0
git push origin v1.0.0Fluxo:
- o GitHub Actions detecta a nova tag
- o workflow cria uma GitHub Release automaticamente
- as release notes sao geradas automaticamente pelo GitHub
Build da imagem:
docker build -t simple_notes .Executar container:
docker run -d -p 80:80 \
-e RAILS_MASTER_KEY=<sua_master_key> \
--name simple_notes \
simple_notes- desenvolvimento:
storage/development.sqlite3 - teste:
storage/test.sqlite3 - producao: SQLite em
storage/separado por papel (primary,cache,queue,cable)
Porta ocupada:
PORT=3001 bin/devDependencias JS fora de sincronia:
bun install --frozen-lockfileRecriar banco local:
bin/rails db:resetRecriar ambiente Docker limpo:
docker compose down -v
docker compose up --build