Wie kann man den Einrichtungsassistenten skripten?

Hallo,

es klingt so, als wäre dies eine FAQ, und ich entschuldige mich im Voraus, falls es eine ist: Offenbar habe ich nicht gründlich genug gesucht :blush: Wie könnte ich ein Skript schreiben, das dasselbe tut wie der Assistent, anstatt dies über die Weboberfläche zu tun?

Es würde mit etwas beginnen, das der Fabricate(admin)-Fixture aus den Spezifikationstests ähnelt. Und vielleicht im benutzerdefinierten Abschnitt des Containers aufgerufen werden.

Vielen Dank im Voraus für Ihre Hilfe!

Wizard besteht zur Hälfte aus Site-Einstellungen und zur Hälfte aus API-Aufrufen.

Für API-Aufrufe können Sie Wie man die Discourse-API reverse-engineert lesen, und für Site-Einstellungen folgen Sie dem Beispiel hier:

2 „Gefällt mir“

Aber … vielleicht liege ich genau hier falsch: Um die API aufzurufen, benötige ich einen API-Schlüssel. Und damit einen Admin-Benutzer… den ich (noch) nicht habe. Ist es möglich, die API ohne API-Schlüssel aufzurufen? Oder einen API-Schlüssel zu erhalten, der nicht an einen Benutzer gebunden ist und über Admin-Berechtigungen verfügt?

Es sieht so aus, als müsste ich rake:admin verwenden, um den Admin-Benutzer zu erstellen. Eigentlich denke ich, dass der Admin-Benutzer bereits erstellt, aber noch nicht genehmigt ist, sodass ich ihn so ändern müsste, dass er genehmigt wird.

Oder vielleicht kann ich einen API-Schlüssel mit api_key:create_master erstellen und damit den Admin-Benutzer anlegen?

root@forum:/var/www/discourse# RAILS_DB=secondsite rake 'api_key:create_master[MASTERKEY]'
ad676e7413778aaaaa5d315c35f188591ef0edb4a4d4b2d644b9247a88421cfa

Aber es scheint, als würde ich nicht ganz verstehen, wie dieser Master-Schlüssel verwendet werden soll, denn das funktioniert nicht:

# 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"}

Wenn ich jedoch einen Admin-Benutzer erstelle:

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!

und dann denselben Master-Schlüssel zusammen mit dem neu erstellten Benutzer verwende, funktioniert es:

curl -X GET "https://forum2/categories" -H "Accept: application/json" -H "Api-Key: ad676e7413778aa3a5d315c358591ef0edb4a4d4b2d644b924b7a88421cfa" -H "Api-Username: loic"
{"category_list":{"can...

und der Benutzer hat Admin-Rechte, da er auch auf /admin/site_settings/category/branding zugreifen kann.

Was genau möchtest du erreichen? Du möchtest die Erstellung eines Admin-Benutzers und das Setzen einiger Einstellungen automatisieren?

1 „Gefällt mir“

Ja, genau. Ich möchte ein neues Forum von Grund auf erstellen und es mit Benutzern, Kategorien und Themen füllen, und zwar über ein Skript, das keine Browserinteraktion erfordert.

Vielleicht einfach zuerst diese Datenbank erstellen und sie als Teil des Installationsprozesses wiederherstellen?

Ich habe keine Datenbank: Die Benutzer, Kategorien und Themen werden mit Daten aus Mailman2 erstellt.

Wenn Sie die Daten importieren möchten, führen Sie dies einfach als separaten Prozess durch.

Wenn das ein einmaliger Aufruf wäre, wäre das in Ordnung. Aber ich möchte das Import-Skript testen können. Und damit der Test ausgeführt werden kann, muss er zuerst ein Discourse-System von Grund auf neu erstellen, ohne dass eine manuelle Intervention mitten im automatisierten Test erforderlich ist :wink:

Zum Kontext: Dies ist Teil der Arbeit, die ich leiste, um Mailman2 in Discourse zu importieren. Der Test würde über tox ausgeführt, was:

  • eine neue Discourse-Instanz erstellt
  • verschiedene Tests durchführt
  • die Discourse-Instanz zerstört

Unter der Annahme einer Multisite-Installation kann die Erstellung eines genehmigten Admin-Benutzers und eines Admin-API-Schlüssels wie folgt erfolgen:

  • docker exec app env RAILS_DB=secondsite rake 'api_key:create_master[MEINKEY]'
  • ( echo benutzer1@beispiel.de ; echo $pass ; echo $pass ; echo ) | docker exec -i app env RAILS_DB=secondsite rake 'admin:create'

Hinweis: Falls keine Multisite-Installation vorliegt, entfernen Sie einfach env RAILS_DB=secondsite.

Überprüfen Sie anschließend, ob alles funktioniert, mit:

curl -X GET https://forum2/admin/backups -H "Accept: application/json" -H "Api-Key: 886171a73dd12759b5d6c1915b0f0d4475e8b3fff3d97954b95171200b6" -H "Api-Username: benutzer1"
[]

(insbesondere Dank an Jay Pfaffman für die Inspiration)

Danach muss Discourse den Assistenten nicht mehr ausführen, obwohl angezeigt wird, dass er ausgeführt werden sollte.

Ich verdiene einen beträchtlichen Teil meines Lebensunterhalts mit Importen. Ich bin mir ziemlich sicher, dass das, was ich unten beschreibe, so ziemlich der übliche Weg für alle ist, die regelmäßig Importe durchführen.

Ich würde Folgendes empfehlen:

  • den Importer konfigurieren und ausführen
  • testen, ob er das tut, was Sie wollen
  • ein Skript zum erneuten Ausführen des Importers schreiben, um die seit dem ersten Lauf erfassten Daten zu importieren
  • das testen
  • den endgültigen Import durchführen, sobald alles oben Genannte funktioniert.
  • diese Daten auf Ihren Produktionsserver wiederherstellen

Die Migrationsaufgabe und die Einrichtung eines Produktionsservers sind völlig unterschiedlich und haben unterschiedliche Anforderungen. Für die Migrationsaufgabe werden meist Dinge benötigt, die der Produktionsserver nicht braucht (ich denke jedoch, dass der Mailman-Importer eine Ausnahme ist).

Eine Migration auf einem Multisite-Server durchzuführen, scheint besonders unbedacht.

3 „Gefällt mir“

Danke für den Rat, ich werde diesen Prozess befolgen. Es gibt über 100 GB an mbox-Archiven, daher werden mindestens einige Tests erforderlich sein.

Dazu… es sieht so aus, als würde der mbox-Importeur immer eine neue Kategorie erstellen und keine bestehende verwenden können. Weißt du zufällig etwas darüber?

Ich kannte die Bedeutung von foolhardy nicht: Es gefällt mir, und ich werde es wieder verwenden :slight_smile:

Das ist umso mehr ein Grund, den Import von vorne zu starten, eine schlechte Idee. Das wird wahrscheinlich Wochen dauern. Wenn du den Importeur erneut ausführst, importiert er nur die neuen Daten (und ich passe ihn oft so an, dass er die alten Daten vollständig überspringt).

Du kannst das Skript wahrscheinlich so anpassen, dass es eine bestehende Kategorie verwendet, indem du ein CategoryCustomField erstellst. Ich empfehle, einfach mit einer leeren Datenbank zu beginnen und das Skript die Kategorie erstellen zu lassen. Anschließend kannst du sie nach Belieben anpassen, und wenn du das Skript erneut ausführst, wird es diese weiter verwenden.

2 „Gefällt mir“

Die eigentliche Gefahr bei deinem Import besteht darin, dass die Daten im Laufe der Jahre wahrscheinlich Unterschiede aufweisen. Daher funktioniert etwas, das für 10 Jahre alte Daten geeignet ist, möglicherweise nicht für 5 Jahre alte Daten und so weiter. Aber vielleicht hast du Glück.

3 „Gefällt mir“

Das hat mich zum Nachdenken gebracht…

1 „Gefällt mir“

Ich bin mir nicht sicher, ob das ein Kompliment ist :wink:
Ich verwende Multisite immer für Importe. Das ermöglicht es mehreren Foren, nebeneinander zu existieren: eines, an dem ich feile, während der Kunde den Import im benachbarten Forum überprüfen kann. Außerdem ist es einfach, eine Datenbank zu kopieren, um von einem bestimmten Punkt neu zu starten.

2 „Gefällt mir“

Moment. . . was!?

Na, dann fall ich ja fast um! Du bist so ziemlich der Einzige auf dem Planeten, der nicht für CDCK arbeitet und von dem ich denke, dass er mehr über Imports weiß als ich. Und wenn du Multisite für Imports verwendest, dann werde ich das auch in Betracht ziehen. Normalerweise starte ich separate Container auf demselben Host mit Traefik davor, also ist es gewissermaßen ähnlich, aber eigentlich nicht wirklich.

3 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.