Massenhafte Benutzererstellung mit Rails etc.

Ich möchte Benutzernamen in großen Mengen hinzufügen (um anfängliche Dummy-Benutzer zum Erstellen von Beiträgen zu erstellen).
Ich habe versucht, eine Rake-Datei zu erstellen, sie zu laden und dann auszuführen. Aber ohne Erfolg. Die Rake-Datei wird manchmal nicht einmal geladen, und wenn ich eine andere Methode verwende, wird sie geladen und dann wird ein Fehler ausgelöst: “Ich weiß nicht, wie ich … erstellen soll.” Fehler von rails c (ich kann mich nicht einmal an die Fehlermeldung erinnern, da ich stundenlang tausende verschiedene Methoden ausprobiert habe, um es zum Laufen zu bringen, ohne Erfolg).

Was ich getan habe
users.rake-Datei erstellt

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

Bearbeiten mit nano

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

Und dann den folgenden Code in den Editor eingefügt und gespeichert

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

In die Rails-Konsole geladen und in Aufgaben geladen

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

Dann versucht, die Benutzer zu erstellen

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

Gibt es eine andere Methode, die ich über das Terminal ausprobieren kann, ohne Drittanbieter-Tools zu verwenden?

Verwenden Sie rake dev:populate, um mit den Standard-Testdaten zu füllen – ganz einfach!

3 „Gefällt mir“

Vielen Dank für Ihren Kommentar.

Ihre Methode würde die Website einfach mit zufälligen Benutzern und Daten füllen, was ich nicht möchte. Und ich möchte keine gestellte Online-Website, ich kann sie bei Bedarf einfach lokal hosten.

Dies ist für eine Produktionsumgebung. Dummy-Benutzer werden tatsächlich einige aussagekräftige Themen haben. Der Zweck davon ist nicht, der Öffentlichkeit eine leere Website zu präsentieren.

Bitte lassen Sie mich daher eine Lösung für die von mir erwähnte Frage wissen.
Ich muss nur Benutzer (ich habe die Namensliste für die Benutzer) in die Hauptdatenbank von Discourse einfügen.

Vielen Dank.

Sie können diese Technik auch für lokale Entwicklunginstallationen verwenden (das ist ihr Hauptzweck).

Warum lesen Sie nicht den Code für diese Rake-Aufgabe und passen ihn nach Belieben an?

1 „Gefällt mir“

Ich empfehle Ihnen, sich die Import-Skripte in script/import_scripts anzusehen und nach einem zu suchen, das CSV-Dateien liest.

Ich habe ein Skript oder Plugin geplant, mit dem Sie Elemente aus einer Tabellenkalkulation erstellen können, aber ich hatte andere Arbeiten dazwischen.

1 „Gefällt mir“

Ich habe den Code geändert, aber die Produktions-Diskussion im Docker-Container. Ich habe eine Rake-Datei mit touch erstellt und sie in nano bearbeitet, dann die App mit ./launcher enter app betreten, dann Rails betreten und rake -T überprüft, und die Rake-Datei wird nicht geladen. Das ist mein Hauptanliegen. Ich kann die Datei nicht einmal in der Produktion testen.

Am localhost gibt es jedoch kein Problem, ich habe die Datei einfach in lib/tasks kopiert und eingefügt und sie funktioniert einwandfrei. Dieses Docker und der Docker-Container sind eine Qual, wenn man direkt auf Dinge zugreifen muss. Und ich kann nicht einmal herausfinden, warum es nicht automatisch in die Liste der Rake-Aufgaben geladen wird.

Daher stecke ich in der Produktion immer noch fest, da die Rake-Datei nicht automatisch geladen wird, sodass ich den Befehl nicht ausführen kann.

Ihre Website wird mich nicht unterstützen, wenn ich Docker nicht verwende, sonst hätte ich gerne die Docker entfernt und die Website direkt gehostet. Das würde das Leben viel einfacher machen.

Normalerweise werden Rake-Aufgaben in der Entwicklung getestet und können als Teil eines Plugins bereitgestellt werden.

1 „Gefällt mir“

Wenn Sie es lokal zum Laufen gebracht haben, können Sie dort ein Backup erstellen und es in der Produktion wiederherstellen.

Haben Sie Ihre Datei in /var/www/discourse/lib/rake innerhalb des Containers abgelegt?

Das Problem ist, dass beim Hochladen eines lokalen Backups auf die Live-Site alle Inhalte, die ich auf der Live-Site erstellt habe, ersetzt werden. Ich habe eine lokale Instanz, aber jemand in diesem Forum hat mir vorgeschlagen, die Live-Site für die Entwicklung zu nutzen. Also entwickle ich jetzt auf der Live-Site (sie ist allerdings noch nicht offiziell öffentlich).

Und ich habe die Datei in lib/tasks abgelegt, die lokale Instanz funktioniert, die Live-Instanz nicht. Ich werde auch lib/rake ausprobieren.

1 „Gefällt mir“

Sie sollten nicht auf einer Live-Site entwickeln.

Sie entwickeln lokal, verpacken die Änderungen in einer Theme Component oder einem Plugin und stellen sie dann auf der Live-Site bereit.

Hier ist ein Beispiel für eine Rake-Aufgabe in einem Plugin:

2 „Gefällt mir“

Ich denke, man sollte Rails oder Ember nicht auf einer Standardinstallation entwickeln, aber ich führe regelmäßig Importe in einem Produktionscontainer durch. Da es sich nur um eine Rake-Aufgabe handelt, muss man den Server nicht einmal neu starten, damit Änderungen wirksam werden.

Da es nicht öffentlich ist, sollte es sicher sein, zu einem Backup zurückzukehren, falls etwas schief geht. Dort würde ich es wahrscheinlich tun.

Man könnte die Live-Seite sichern und auf der Entwicklungsseite wiederherstellen, die Arbeit erledigen und dann wieder auf der Live-Seite sichern/wiederherstellen.

3 „Gefällt mir“