Rails assets compilam, mas nada muda

Você abre seu projeto Rails, executa bin/dev e começa a fazer alterações no CSS.

E nada acontece.

Você verifica o console e encontra um log do esbuild indicando que os assets foram compilados. Parece que estão em cache. Então você executa bin/rails tmp:clear, muda o CSS e salva, compila novamente…

E ainda assim, nada muda.

Solução

Se você rodar

bin/rails assets:clobber

e então reiniciar a aplicação, pode ser que as alterações comecem a surtir efeito novamente, conforme o esperado.

Se isso resolver o problema, provavelmente os assets não estavam sendo atualizados antes porque havia assets pré-compilados. O Rails estava priorizando esses assets pré-compilados sobre os de desenvolvimento, e esses assets pré-compilados não são tratados como cache.

Quais são as diferenças entre os comandos de clear?

Em um projeto Rails, existem diversas maneiras de limpar as coisas, e os comandos disponíveis também dependem do que você instalou, alguns deles são:

bin/rails tmp:clear
limpa cache, socket e arquivos de screenshot do diretório tmp/.

bin/rails dev:cache
Liga ou desliga o uso de cache para o ambiente de desenvolvimento.

bin/rails log:clear
Trunca todos/os arquivos *.log no diretório log/ para zero bytes.

Basicamente, ele remove tudo do arquivo, mas não exclui o próprio arquivo. Você pode especificar os logs que deseja resetar usando a sintaxe
LOGS=test,development bin/rails log:clear.

bin/rails assets:clean
Em versões anteriores, esse comando removia todos os assets. No entanto, agora ele remove os assets antigos enquanto mantém as últimas três versões.

bin/rails db:schema:cache:clear
Na inicialização, o Rails consulta os detalhes de todas as tabelas no banco de dados. Rodando o comando você remove o arquivo de cache disso.

Não é usado por padrão e é distinto de db/schema.rb. O arquivo de cache é db/schema_cache.yml, sendo usado se existir. Você pode criá-lo com bin/rails db:schema:cache:dump.

Cloberring

Clobbering para software refere-se a sobrescrever todo o conteúdo de um arquivo e é frequentemente usado para se referir a desinstalações completas.

bin/rails assets:clobber
remove tudo do diretório public/assets.

Como o clobber de assets remove tudo do public/assets, poderia-se esperar um comportamento semelhante de outros comandos “clobber”, como tailwindcss:clobber excluir public/assets/tailwind-{hash}.css e assim por diante. No entanto, não é exatamente isso que acontece. Os seguintes comandos atuam nos arquivos dentro de app/assets/builds. Este diretório é usado para seus assets se você não os pré-compilar ou se apenas executar bin/rails css:build, e assim por diante.

bin/rails tailwindcss:clobber
remove todos os arquivos CSS de app/assets/builds.

bin/rails css:clobber
a mesma coisa, remove todos os arquivos CSS de app/assets/builds.

bin/rails javascript:clobber
remove todos os arquivos JS de app/assets/builds.