Installation von Apps: File-PIP für App mehrfach ausführen wirft Fehler

  • Betroffene Version
    WoltLab Suite 5.4
    Betroffene App
    WoltLab Suite Core
    XML
        <instructions type="install">
            <instruction type="file" />
            <instruction type="template" />
            <instruction type="acpTemplate" />
    
            <instruction type="database">acp/database/install_com.example.foo.php</instruction>
    
            <instruction type="file" />
            <instruction type="myPip" />
    </instructions>

    =>

    Die Vorgehensweise kam mir als Idee für einen Workaround für ein anderes Problem, daher den Sinn einfach nicht hinterfragen. Ein Fehler ist es dennoch; es sollte geprüft werden, ob die Datei(en) bereits registriert ist/sind.

    Einmal editiert, zuletzt von gn5VmUKCtv6ekrMf (15. Oktober 2021 um 09:42) aus folgendem Grund: database-PIP hinzugefügt

  • Nein, wobei im Snippet oben noch das Database-PIP dazwischen fehlt. Die beiden file-Instructions befinden sich in zwei verschiedenen Nodes. However sollte dieser Fehler nicht auftreten, egal, was man anstellt. :P

  • Die Instruktionen sind an sich korrekt. Die Config-Datei wird von mir nicht explizit ausgeliefert, sondern vom PIP WSC-seitig zusätzlich ohne mein explizites Wissen angelegt. Ob ich die Dateien ein Mal oder mehrmals drauf ballere, sollte egal sein, denn das an sich produziert keine Fehler.

    Sicher tritt ein Fehler auf, weil ICH die Instruktionen so geschrieben habe. Die Instruktionen sind allerdings an sich valide und der Fehler wird vom WSC produziert.

  • Nach XSD dürften die Instruktionen so nicht valide sein.

    Die XSD beschreibt nur, dass in instructions mindestens ein instruction sein muss. In welcher Reihenfolge welche PIPs ausgeführt werden, ist nirgendwo vorgeschrieben. Es gibt lediglich für die Dev-Tools eine PHP-Logik, nach der die Reihenfolge für Sync-All festgelegt wird.

    • Offizieller Beitrag

    Der Nutzen eines mehrfache Deployment von Dateien bei der Installation einer App erschließt sich mir nicht. Ich sehe hier kein sinnvolles Argument, warum man dies überhaupt tun sollte und gehe davon aus, dass derartige Instruktionen effektiv auf einen Irrtum in den Anweisungen zurückzuführen ist.

    Die Korrektur der obigen Fehlermeldung ist nicht schwierig, aber der Fehler selbst ist nur ein Symptom für einen Logikfehler in den Installationsanweisungen. Insbesondere durch das Laden der App als Folge des vorherigen Deployment der Dateien ist dieser Schritt nicht idempotent (PHP lädt Klassen zur Laufzeit nicht neu!). Angesichts dieser intransparenten Fehlerquelle wird es keine Änderung geben.

  • Alexander Ebert 15. Oktober 2021 um 17:29

    Hat das Label Wird nicht behoben hinzugefügt.
  • Der Nutzen eines mehrfache Deployment von Dateien bei der Installation einer App erschließt sich mir nicht.

    Es war eine der beiden Ideen, die ich hatte, damit für myPip die neue Applikation geladen wird (wird sie nur in dem Node, direkt nachdem das file-PIP ausgeführt wurde. Schlussendlich nutzen wir jetzt ein Script, dass die Applikation lädt.

    Nur damit erklärt ist, warum überhaupt. ^^

  • Ja, bzw. es war der erste Versuch nachdem ich bemerkt habe, warum die Installation knallt und gesehen habe, dass dort die Applikation geladen wird. Alternativ hättest du es im Ticket dazu gekriegt. ^^

    Ich nehme aber mal an du würdest es in dem Fall ähnlich machen, oder?

    • Offizieller Beitrag

    Ich nehme aber mal an du würdest es in dem Fall ähnlich machen, oder?

    Das kann ich pauschal nicht beantworten. Die Tatsache, dass das PIP aber von einer App abhängig ist, erachte ich aber grundsätzlich als problematisch, insbesondere wenn die App es für die eigene Installation benötigt.

    Das Laden einer App bei der Installation oder Deinstallation ist de facto ein undefinierter Zustand.

    Konzeptionell würde ich daher das PIP so gestalten, dass es nicht unmittelbar von der App abhängig ist. Im Zweifelsfall hat man halt etwas Code dupliziert, dafür aber eine potentielle "foot gun" weniger im Code.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!