Creazione massiva di utenti con rails ecc.

Voglio aggiungere nomi utente in blocco (per creare utenti fittizi iniziali per creare post).
Quindi ho provato a creare un file rake, caricarlo ed eseguirlo. Ma non ho avuto successo. Il file rake a volte non viene nemmeno caricato e quando uso un altro metodo viene caricato e poi viene generato un errore “Non so come creare…” errore generato da rails c (non riesco nemmeno a ricordare il messaggio di errore poiché ho provato mille metodi diversi per ore per farlo funzionare senza successo)

Cosa ho fatto
Creata la cartella users.rake

cd /var/www/discourse
mkdir -p lib/tasks
touch lib/tasks/users.rake

Modifica con nano

cd /var/www/discourse/lib/tasks
sudo nano users.rake

E poi ho incollato il seguente codice nell’editor e salvato

namespace :users do
  desc "Create users from a list"
  task :create, [:usernames, :password, :domain] => :environment do |task, args|
    usernames = args[:usernames].split(',')
    password = args[:password]
    domain = args[:domain]

    User.transaction do
      usernames.each do |username|
        next if User.exists?(username: username)

        email = "#{username}@#{domain}"
        user = User.new(username: username, email: email, password: password)

        unless user.save
          puts "Failed to save user #{username}: #{user.errors.full_messages.join(", ")}"
          raise ActiveRecord::Rollback
        end
      end
    end
  end
end

Caricato in rails c e caricato nei task

rails console
load 'lib/tasks/users.rake'
exit

Poi ho provato a creare gli utenti

./launcher enter app
rake users:create["username1,username2", "password", "domain.com"]

C’è qualche altro metodo che posso provare tramite il terminale senza usare cose di terze parti.

Usa rake dev:populate per popolare con i dati di test pronti all’uso - facile!

3 Mi Piace

Grazie per il tuo commento.

Il tuo metodo riempirà semplicemente il sito con alcuni utenti e dati casuali, cosa che non desidero. E non voglio un sito online di prova, posso semplicemente ospitarlo localmente se voglio.

Questo è per un ambiente di produzione. Gli utenti fittizi avranno in realtà alcuni argomenti significativi. Lo scopo di questo non è presentare un sito vuoto al pubblico.

Quindi, per favore, fammi sapere una soluzione relativa alla domanda che ho menzionato.
Ho solo bisogno di inserire utenti (ho l’elenco dei nomi degli utenti) nel database principale di Discourse.

Grazie.

Puoi usare questa tecnica anche per le installazioni di sviluppo locali (questo è il suo scopo principale).

Perché non leggere il codice di quel rake task e modificarlo come ritieni opportuno?

1 Mi Piace

Ti consiglio di esaminare gli script di importazione in script/import_scripts e cercarne uno che legga file CSV.

Stavo pianificando uno script o un plugin che ti permettesse di creare cose da un foglio di calcolo, ma ho avuto altro lavoro in sospeso.

1 Mi Piace

Ho modificato il codice, ma il discourse di produzione nel container Docker, ho creato un file rake con touch e l’ho modificato in nano, poi sono entrato nell’app con ./launcher enter app, poi sono entrato in rails e ho controllato rake -T e il file rake non viene caricato. Questa è la mia preoccupazione principale. Non posso nemmeno testare il file in produzione.

Tuttavia, in localhost, non ci sono problemi, ho semplicemente copiato e incollato il file in lib/tasks e funziona bene. Questo Docker e il container Docker sono un tormento quando è necessario accedere direttamente alle cose. E non riesco nemmeno a capire perché non venga caricato automaticamente nell’elenco dei task rake.

Quindi, sono ancora bloccato in produzione poiché il file rake non viene caricato automaticamente, quindi non posso eseguire il comando.

Il tuo sito non mi supporterà se non uso Docker, altrimenti sarei stato più che felice di rimuovere Docker e ospitare il sito direttamente. Questo renderebbe la vita molto più facile.

Normalmente le attività di rake vengono testate in fase di sviluppo e possono essere distribuite come parte di un plugin.

1 Mi Piace

Se lo hai funzionato localmente, puoi eseguire il backup lì e ripristinare in produzione.

Hai messo il tuo file in /var/www/discourse/lib/rake all’interno del container?

Il problema è che quando il backup locale viene caricato sul sito live, sostituirà tutti i contenuti che ho creato sul sito live. Ho un’istanza locale, ma qualcuno in questo forum mi ha suggerito di usare il sito live per lo sviluppo. Quindi, ora sto sviluppando sul sito live (anche se non è ancora ufficialmente pubblico).

E ho messo il file in lib/tasks, l’istanza locale funziona, non quella live. Proverò anche lib/rake.

1 Mi Piace

Non dovresti sviluppare su un sito live.

Sviluppi localmente, impacchetti le modifiche in un componente del tema o in un plug-in e quindi distribuisci sul sito live.

Ecco un esempio di rake task in un plug-in:

2 Mi Piace

Penso che non dovresti sviluppare rails o ember su un’installazione standard, ma eseguo regolarmente importazioni in un container di produzione. Dato che si tratta solo di un’attività rake, non è nemmeno necessario riavviare il server affinché le modifiche abbiano effetto.

Dato che non è pubblico, dovrebbe essere sicuro ripristinare un backup se qualcosa va storto. Probabilmente è lì che lo farei.

Potresti eseguire il backup del sito live e ripristinarlo sul sito di sviluppo, fare il lavoro e poi eseguire nuovamente il backup/ripristino sul sito live.

3 Mi Piace