Treze engines já rodando neste app

Prévia grátis 3 min de leitura

Uma busca que vale fazer

$ grep -rl "class Engine < .*Rails::Engine" $(bundle show --paths)
railties, action_text-trix, actioncable, activestorage, actionmailbox,
actiontext, importmap-rails, lexxy, solid_cable, solid_cache, solid_queue,
stimulus-rails, tailwindcss-rails, turbo-rails

A busca encontra catorze gems na árvore de dependências deste projeto. Uma delas, a railties, só aparece porque define o próprio Rails::Engine, na documentação e no template de plugins novos. As outras treze definem cada uma uma classe no formato class Engine < Rails::Engine. Turbo, Stimulus, Tailwind, Solid Queue, Solid Cache, Solid Cable, Active Storage, Action Mailbox, Action Text: cada uma é, mecanicamente, uma engine Rails. Você já usou a maioria delas. Cursos anteriores deste catálogo cobriram o Turbo Drive, controllers Stimulus, as tabelas de jobs do Solid Queue e os anexos do Active Storage sem nomear o mecanismo comum.

O que é uma engine, numa frase

Uma engine Rails é uma aplicação Rails que pode morar dentro de outra. Ela tem namespace próprio e, dependendo de como é feita, rotas, controllers, models e assets próprios, empacotada para que um app hospedeiro dependa dela em vez de escrever a mesma coisa do zero.

Por que isso merece um curso agora

Os cursos de gems até aqui, "Bundler e Gemfile" e "Bundler: versionamento semântico", trataram gems como caixas-pretas: adicionar uma linha, rodar bundle install, confiar no comportamento. Este curso abre uma dessas caixas. Ele não ensina a construir uma engine do zero. "Arquitetura: engines privadas", um curso sênior deste catálogo, faz isso, extraindo uma engine privada e reutilizável de um app que cresce. O trabalho deste curso é menor e vem antes. É reconhecer o padrão em gems de que você já depende, e entender o que "isolado" compra antes de tentar construir algo isolado.

O que este curso cobre

A aula 2 cobre o isolate_namespace, a chamada por baixo da maioria dessas engines, lida no código-fonte delas, e o que ela isola e o que não isola. A aula 3 mostra uma divisão que a árvore de dependências deste app já tem: engines que acrescentam rotas HTTP e engines que não acrescentam nenhuma. A aula 4 cobre a palavra-chave mount e a distinção entre full e mountable do guia de engines do Rails. A aula 5 lê a nomeação isolada de tabelas deste app, ensinada num curso anterior, pela lente das engines. A aula 6 explica por que os módulos de domínio deste catálogo, Catalog::, Enrollment:: e Identity::, não são engines de propósito. Ela também diz o que teria de mudar para valer a pena rever isso. A aula 7 acompanha uma requisição de ponta a ponta pela pilha de uma engine.

Onde isso deixa você

Você ainda não vai conseguir construir uma engine; "Arquitetura: engines privadas" cobre isso mais adiante. Vai conseguir abrir o Gemfile.lock de qualquer app Rails, achar quais dependências são engines e ler o que o isolamento comprou para quem escreveu cada gem. Uma gem deixa de ser uma caixa lacrada que por acaso funciona.

Aula 1 de 7 · grátis

Continue com a aula 2

isolate_namespace: o que ele isola

Lê o isolate_namespace em três gems e mostra que ele isola nomes, mas processo e banco continuam compartilhados.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...