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

  • Affected Version
    WoltLab Suite 5.4
    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.

  • Ein Fehler ist es dennoch; es sollte geprüft werden, ob die Datei(en) bereits registriert ist/sind.

    Das verstehe ich nicht. Warum sollte die Installationsroutine das prüfen? Wenn du die Instructions verhaust, ist das kein Fehler der Software. Die macht alles genau so, wie du es von ihr laut package.xml verlangst.

  • 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.

    • Official Post

    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.

  • 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. ^^

    • Official Post

    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.