Podemos inserir usuários diretamente em bancos de dados Discourse separados com segurança?

Olá a todos,

Estamos executando vários fóruns Discourse como instâncias isoladas na mesma máquina virtual. Cada fórum tem seu próprio banco de dados Postgres separado, mas todos são gerenciados por um script compartilhado que é executado na máquina host.

Estamos buscando automatizar a criação de usuários iniciais durante a configuração. Em vez de usar a API ou o importador CSV, estamos nos perguntando:

:light_bulb: É possível (e seguro) inserir registros de usuários diretamente no banco de dados de cada instância?

Como nosso script já interage com os bancos de dados, isso poderia otimizar significativamente o processo de provisionamento.

Alguém já tentou a criação direta de usuários no banco de dados antes? Ou isso é uma má ideia devido a riscos com integridade de dados, sessões ou outros mecanismos específicos do Discourse?

Agradecemos qualquer conselho ou experiência que possam compartilhar!

1 curtida

É um pouco mais seguro ter o Rails fazendo isso do que modificar o banco de dados você mesmo, mas você pode fazer isso se quiser. Observe que você precisa tocar em pelo menos nas tabelas user e user_emails, e garantir que os user_ids correspondam.

Dê uma olhada em discourse/db/fixtures/009_users.rb at main · discourse/discourse · GitHub e, em seguida, crie um plugin que adicione um fixture de forma semelhante (talvez ./discourse-salesforce/db/fixtures/001_groups.rb).

Você também pode usar um script de importação como exemplo.

1 curtida

Obrigado, @pfaffman — Agradeço muito a orientação!

Só para esclarecer: uma das principais razões pelas quais estamos explorando essa rota é que tanto os métodos baseados em CSV quanto em API são muito lentos para o que estamos tentando fazer. Estamos iniciando muitas instâncias isoladas e precisamos popular cada uma delas com um lote de usuários rapidamente durante o provisionamento.

A abordagem de fixtures/plugin que você mencionou permitiria a criação de usuários significativamente mais rápida em comparação com os métodos de API ou CSV? Especificamente, esperamos reduzir o tempo de espera durante a configuração — idealmente algo que execute instantaneamente ou quase instantaneamente junto com a configuração inicial do banco de dados.

Obrigado novamente!

1 curtida

Você pode consultar os scripts de importação em massa para obter exemplos de atualização direta do banco de dados. O script de importação tem alguma sobrecarga, então talvez o exemplo nas fixtures seja um pouco mais rápido?

Quantos usuários você está adicionando? Você tem os mesmos usuários para cada site?