Olá,
Instalei o Discourse em um servidor Fedora 31 seguindo o guia de instalação recomendado, mas usei o podman em vez do Docker para executar o container. Tudo funcionou perfeitamente nesta manhã quando configurei inicialmente, porém tive problemas para fazer o HTTP simples chegar ao Nginx no host e precisei usar os certificados SSL em ambas as instâncias do Nginx. Configurei o Discourse e tudo ficou ok.
Mais tarde, decidi reconstruir o Discourse com SSL desativado e fazer a build em uma conta de usuário não root. O HTTP simples para o host funcionou bem, mas apareceu uma página em branco (o título estava correto e o favicon também).
root@xena-app:/var/www/discourse# ls public/assets -al
total 15640
drwxr-xr-x. 2 discourse discourse 10 Jan 11 13:54 .
drwxr-xr-x. 3 discourse discourse 29 Jan 11 13:57 ..
-rw-r--r--. 1 discourse discourse 595 Jan 11 13:49 _activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js
-rw-r--r--. 1 discourse discourse 250 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.br
-rw-r--r--. 1 discourse discourse 420 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.gz
-rw-r--r--. 1 discourse discourse 695 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.map
-rw-r--r--. 1 discourse discourse 990519 Jan 11 13:50 _admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
-rw-r--r--. 1 discourse discourse 83903 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.br
-rw-r--r--. 1 discourse discourse 106465 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
-rw-r--r--. 1 discourse discourse 366446 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map
drwxr-xr-x. 2 discourse discourse 4096 Jan 11 13:54 admin-login
...
Os arquivos solicitados realmente estão faltando, e o Nginx confirma isso:
2020/01/11 13:59:49 [error] 60#60: *20 open() "/var/www/discourse/public/assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js" failed (2: No such file or directory), client: 10.0.2.2, server: _, request: "GET /assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js HTTP/1.0", host: "idlerpg.xyz", referrer: "https://idlerpg.xyz/"
Pensei que isso fosse um problema da minha instalação, pois os arquivos estavam presentes na instalação antiga nesta manhã, rodando como root no host! Apaguei a pasta compartilhada e reconstruí como usuário não root, obtendo os mesmos resultados repetidamente. Então tentei novamente, desta vez como root, com as mesmas configurações da manhã, e os mesmos problemas persistiram.
Uma instalação como usuário não root sempre mostra a página “Parabéns, você instalou o Discourse!”, mas, ao finalizar a instalação, obtenho a página em branco porque os arquivos de assets estão faltando.
Existe alguma maneira de corrigir a ausência dos assets?
Mudei isso para um bug. Não consigo obter uma versão com todos os ativos ao executar tests-passed. Tentei entrar no container e executar um rake assets:precompile, mas os mesmos ativos continuam ausentes.
Certo, depois de alguns testes, posso afirmar que ele sempre exibe uma página em branco após cada rebuild. Se eu executar RAILS_ENV=production bin/rake assets:precompile, tudo funciona normalmente em seguida. Não faço ideia do porquê, já que ele deveria compilá-los durante o rebuild de qualquer forma?
Estamos aqui porque algo não está funcionando. O que deveria acontecer e o que acontece são estados diferentes.
Você está afirmando com confiança que o Podman não está envolvido. Seria bom provar isso para eliminá-lo claramente como um fator. Pelo que sei, você não completou o método de instalação oficial com o Docker para ver se isso elimina o problema.
Interessante, então os arquivos são criados corretamente, mas a persistência falha?
Eu investigaria como o volume do Podman está funcionando e qual é o driver que o suporta. No mundo do Docker, tivemos muitos problemas estranhos com drivers de armazenamento ao longo dos anos, o que nos levou até a manter uma lista de drivers “aprovados” em nosso script de inicialização.
Para ficar claro, meus experimentos com o Podman realmente testavam o launcher, não o Discourse. Pelo menos, quando o testei, ele dependia de detalhes de saída do Docker que o Podman não tenta emular.
@Adriany, estou supondo que você esteja usando o driver de armazenamento padrão, que é o mesmo recomendado para o Discourse, que no Docker é “overlay2” — mas não sei se esse é o seu caso.
Estou usando overlayfs, que é o equivalente ao overlay2.
Curiosamente, ele foi compilado sem problemas e sem ativos faltantes após algumas compilações adicionais com ativos faltantes quando tentei adicionar plugins. Quando reconstruí sem plugins, tudo funcionou perfeitamente. Estranho?
Edição: Funcionou para mim e agora os ativos estão em cache aqui. Durante a execução, parou de funcionar para outros usuários.
Edição 2: Outra reconstrução fez com que os ativos falhassem como antes, e a solução foi reconstruir como antes.
Se os arquivos forem gerados com sucesso pelo nosso pipeline de assets e o sistema operacional indicar que não há erro, mas eles desaparecem após a reconstrução (o que efetivamente reinicia o contêiner), eu apostaria (novamente) no driver de armazenamento do Podman.
A menos que alguém consiga reproduzir esse mesmo comportamento usando o Docker (e haveria vários tópicos se fosse esse o caso), temo que você precise abrir um ticket no projeto do Podman sobre isso.
Fiz mais investigações e parece que eu estava errado nas minhas apostas sobre onde os arquivos estão armazenados ou simplesmente não sou bom em encontrá-los.