Parece ser uma FAQ e peço desculpas antecipadamente se for: aparentemente não procurei o suficiente Como posso escrever um script para fazer o mesmo que o assistente, em vez de fazê-lo pela interface web?
Mas… talvez seja aí que eu esteja perdido: para que eu possa chamar a API, preciso de uma chave de API. E, portanto, de um usuário administrador… que eu ainda não tenho. É possível chamar a API sem uma chave de API? Ou obter uma chave de API que esteja desvinculada de um usuário e tenha credenciais de administrador?
Parece que devo usar rake:admin para criar o usuário administrador. Na verdade, acho que o usuário administrador já foi criado, mas não foi aprovado, então precisaria alterá-lo para que seja aprovado.
Ou talvez eu possa criar uma chave de API com api_key:create_master e usá-la para criar o usuário administrador?
Mas parece que não entendo muito bem como essa chave mestra deve ser usada, pois isso não funciona:
# curl -X GET "https://forum2/categories" -H "Accept: application/json" -H "Api-Key: ad676e7413778aa3a5d315c35f91ef0edb4a4d4b2d644b924b7a88421cfa"
{"errors":["You are not permitted to view the requested resource. The API username or key is invalid."],"error_type":"invalid_access"}
No entanto, se eu criar um usuário administrador:
root@forum:/var/www/discourse# RAILS_DB=secondsite rake 'admin:create'
Email: loic@dachary.org
Password:
Repeat password:
Ensuring account is active!
Account created successfully with username loic
Do you want to grant Admin privileges to this account? (Y/n) Y
Your account now has Admin privileges!
e depois usar a mesma chave mestra especificando o usuário recém-criado, isso funciona:
Sim, exatamente. Quero criar um novo fórum do zero e populá-lo com usuários, categorias e tópicos, por meio de um script que não exija nenhuma interação com o navegador.
Se fosse apenas um teste único, tudo bem. Mas quero poder testar o script de importação. E para que o teste seja executado, ele precisa primeiro criar um Discourse do zero, sem exigir algum tipo de intervenção manual no meio do teste automatizado
Uma parte significativa da minha renda vem de atividades de importação. Tenho bastante certeza de que o que descrevo abaixo é basicamente como todos que fazem importações regularmente procedem.
O que eu recomendo é:
configurar e executar o importador;
testar se ele faz o que você deseja;
criar um script para reexecutar o importador e importar os dados adquiridos desde a primeira execução;
testar isso;
executar a importação final quando tudo o acima funcionar;
restaurar esses dados no seu servidor de produção.
A tarefa de migração e a configuração de um servidor de produção são totalmente diferentes e têm requisitos distintos. Geralmente, a tarefa de migração exige recursos que o servidor de produção não precisa (embora eu ache que o importador mailmain seja uma exceção).
Executar uma migração em um servidor multisite parece especialmente imprudente.
Isso é mais uma razão para considerar uma nova execução da importação do zero como uma má ideia. Isso provavelmente levaria semanas. Ao reexecutar o importador, apenas os novos dados são importados (e eu frequentemente o modifico para ignorar completamente os dados antigos).
Você provavelmente pode modificar o script para usar uma categoria existente criando um CategoryCustomField. Recomendo começar com um banco de dados vazio e deixar o script criá-lo; assim, você pode personalizá-lo como desejar e, ao reexecutar o script, ele continuará a usá-lo.
O verdadeiro risco da sua importação é que provavelmente haverá diferenças nos dados ao longo dos anos, então o que funciona para dados de 10 anos não funcionará para dados de 5 anos e assim por diante. Mas talvez você tenha sorte.
Não sei se isso é um elogio
Sempre uso multisite para importações. Isso permite que vários fóruns coexistam: um que estou ajustando enquanto o cliente pode revisar a importação no fórum vizinho. Além disso, é fácil copiar um banco de dados para reiniciar a partir de um determinado ponto.
Bom, que o vento me leve! Você é praticamente a única pessoa no planeta que não trabalha na CDCK que eu conheço e que sabe mais sobre importações do que eu. E se você usa multisite para importações, então, bem, eu vou considerar fazer o mesmo. Geralmente, eu levanto containers separados no mesmo host com o traefik na frente, então acho que é meio que a mesma coisa, mas não exatamente.