Aqui está uma atualização - eventualmente consegui fazer funcionar. Algumas das lições aprendidas podem ajudar outras pessoas, daí o relato detalhado abaixo. O problema com as permissões Unix pode valer a pena adicionar ao OP.
Permissões Unix na pasta de anexos
O importador SMF2 estava funcionando bem, mas havia um pequeno problema relacionado às permissões Unix dos anexos. Ao executar o script de importação, ele é executado como o usuário discourse, que não tem necessariamente permissões de leitura e gravação no volume montado de anexos.
Durante a importação, parece que o importador cria pequenos arquivos temporários no mesmo diretório, portanto, você deve garantir que o usuário correto tenha permissões de leitura e gravação. Fiz isso usando chown recursivamente no diretório no host para o usuário discourse, mas existem outras maneiras, incluindo a definição de permissões muito abertas ou o uso de Listas de Controle de Acesso.
Depurar uploads com falha é difícil
Se o importador SMF2 falhar em um upload por qualquer motivo, ele relata a falha da mesma maneira, tornando difícil saber por que um anexo/upload falhou.
As razões podem incluir:
- Anexos estão no lugar errado no sistema de arquivos.
- As permissões nos anexos são insuficientes (precisa de
rw). - O volume de montagem Docker não está configurado corretamente.
- O banco de dados SMF2 está relatando que deveria haver um anexo que não existe mais em sua pasta de anexos (em nosso fórum SMF2, que tem cerca de 20 anos, havia vários anexos ‘perdidos’ - não há muito que você possa fazer a respeito…)
- O objeto de upload não está sendo salvo corretamente no banco de dados Discourse ou em disco em
/shared/standalone/uploads - O markdown para o link de upload não está sendo criado.
Eu depurei isso testando cada etapa do processo de anexo de ponta a ponta e adicionando um grande número de instruções de depuração extras puts no código smf2.rb, para descobrir qual parte do processo de criação de upload não estava funcionando. No meu caso, houve vários pequenos problemas que acabaram sendo resolvidos um por um.
Não seja preguiçoso, Marcus
E no final, fiquei com preguiça e não estava limpando totalmente o banco de dados para zero, então tive o problema de que tudo estava funcionando - mas o importador não substitui um Tópico ou Post que já foi importado. Portanto, o Markdown que referencia o upload, que deveria parecer com:
---

não estava sendo inserido nos posts.
Testando se está funcionando
A maneira que encontrei para testar se tudo isso estava funcionando de ponta a ponta foi executar
Post.where("raw LIKE ?", "%upload://%").count
no console Rails. Ele retornaria a contagem de Posts que realmente têm um link de upload adequado neles e esse número aumenta gradualmente durante o processo de importação.