Plugin kann nicht aktiviert werden - @import Variablen sind undefined (500 Recursion detected)

Hallo Community,

ich habe akuell den Fall, dass ein Plugin nicht aktiviert werden kann. Die Installation erfolgt. Möchte man es dann aktivieren, erhält man einen 500 Fehler.
Im Netzwerk-Tab habe ich herauslesen können, dass es zu einem 500 Fehler bei JSON decode kommt mit der Info: Recursion detected
Aufgefallen ab Version 6.1.4

Der activateContext in der Bootstrap des betreffenden Plugins ist leer:
 

public function activate(ActivateContext $context): void
{
}

 

Das steht im Log:

[2020-04-05 16:28:40] request.INFO: Matched route "api.action.plugin.activate". {"route":"api.action.plugin.activate","route_parameters":{"_route":"api.action.plugin.activate","_controller":"Shopware\\Core\\Framework\\Plugin\\Api\\PluginController::activatePlugin","version":"1"},"request_uri":"https://domain.de/api/v1/_action/plugin/activate?pluginName=pluginName","method":"POST"} []

[2020-04-05 16:28:42] php.CRITICAL: Uncaught Exception: Recursion detected {"exception":"[object] (InvalidArgumentException(code: 0): Recursion detected at ****** /pfadName/vendor/symfony/http-foundation/JsonResponse.php:167)"} []

 

Habe eine mögliche Ursache gefunden:

 

Unter der aktuellsten Developer Version wird beim Aktivieren ein SCSS Fehler geworfen:

Plugin could not be activated due to error message "Unable to compile the theme "Storefront". Undefined variable $prefix-variable

 

Dadurch kann das Plugin nicht aktiviert werden. Eingebunden werden die Styles nach genau diesem Muster:
https://docs.shopware.com/en/shopware-platform-dev-en/how-to/storefront-assets#adding-styles

 

Beispiel:

/src/Resources/app/storefront/src/scss/abstract/variables.scss

$prefix-variable: "green" !default;

/src/Resources/app/storefront/src/scss/base.scss

@import 'abstract/variables';
@import 'component/beispiel';

/src/Resources/app/storefront/src/scss/component/beispiel.scss

.irgendwas {
    color: $prefix-variable;
}

 

EDIT:

Ein nochmaliges Importieren der variables.scss in der component/beispiel.scss löst das Problem des Aktivierens und der Kompiler läuft durch. Hat Shopware hier nun ein Problem beim Kompiler? Einen Fehler in der Struktur sehe ich hier nicht - und bisher hat es auch funktioniert. Und ich kann es auch nicht immer reproduzieren.

Die Fehlermeldung Recursion detected aus der Produktivumgebung geht allerdings völlig an dem eigentlichen Fehler vorbei…
 

Ich glaube es gibt aktuell einen Issue beim Compiler wenn zwei Plugins die gleichen Namen für ihre SCSS Variablen benutzen. Vielleicht ist das der Fall?

1 „Gefällt mir“

Hallo [@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski „Moritz Naczenski“)‍

die Variable ist einzigartig. Sie hat das Hersteller-Prefix und kommt auch in keinem anderen unserer Plugins vor…

 

Ich kann es leider auch nicht zuverlässig reproduzieren.

In meiner Entwicklungsumgebung mit eurem Vagrant-Setting auf Mac OS (vom 06.04: v6.1.9 Stable Version 999999.9999999) funktioniert es.
In meiner Entwicklungsumgebung mit eurem Vagrant-Setting auf Windows 10 (vom 06.04: v9999999 Developer Version) funktioniert es nicht.
Bei zwei Kunden aktuell ebenfalls nicht.
In meinen Demoshops wiederum kein Problem. 

Kann es sein, dass je nach Server-Konfiguration ein unterschiedlicher Compiler genutzt wird? Je nachdem wie man kompiliert kam es in der Vergangenheit ja immer wieder zu Problemen mit Variablen…

./psh.phar storefront:hot
./psh.phar storefront:watch
./psh.phar storefront:build
./psh.phar storefront:dev
bin/console theme:compile

 

 

Zusatzfrage: Wieso unterscheiden sich die Versionsnummern beider Vagrant-Settings?

Ich aktualisiere immer mit
> git pull
> cd platform
> git pull
> cd …
> composer update
> rm -R var/cache/*
> ./psh.phar install

[@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski “Moritz Naczenski”)‍

Ich habe die Ursache finden können , aber nicht, warum es nur bei manchen Konstellationen auftritt. Ich habe dazu ein Demoplugin erzeugt (siehe unten).

Je nach Konstellation/Installation/System wird die base.scss zum Kompilieren verwendet oder auch nicht.


Erläuterung:

In der base.scss ist die Reihenfolge der zu ladenden @import-Dateien vorgegeben. In Systemen, welche die base.scss verwenden kann das Plugin installiert werden.

Beispiel dieser base.scss

/*
 * Variables
 * ------- */
@import 'abstract/variables.scss';

/*
 * Component
 * ------- */
@import 'component/component.scss';

In einer anderen Konstellation/Installation/System wird aber die base.scss ignoriert (?!) und die Dateien zum Kompilieren (von Webpack?) beim Aktivieren einfach irgendwie eingelesen. Also beispielsweise die component/component.scss bevor die abstract/variables.scss eingelesen wurde. Damit sind die Variablen dann unbekannt und das Plugin kann nicht aktiviert werden.


Herausgefunden habe ich das, als ich mit dem Demoplugin herumgespielt habe und den @import-Befehel der component/component.scss aus der base.scss entfernt habe, aber die Datei im Plugin belassen habe. Dann habe ich versucht das Plugin in dem Konstellation/Installation/System zu aktivieren. Die Datei wurde dennoch beim Kompilieren verwendet und die Verwendung der Variable in dieser Datei bemängelt.

 

Ergebnis:
Aus mir unverfindlichen Gründen wird in machen Systemen mit gleicher Shopware Version die base.scss nicht verwendet und die scss-Dateien beim Kompilieren eigenständig gezogen. Dabei kommt es dann beim Aktivieren zu dem Fehler, dass definierte Variablen unbekannt sind.


Beispiel-Plugin:
Dropbox - Scss.zip - Simplify your life

Ich habe aktuell das gleiche problem mit einem Custom Plugin. Die Struktur ist richtig angelegt, in der lokalen Umgebung funktioniert das theme:compile perfekt. Auf dem Staging-Server plötzlich nicht. Er moniert, dass ihm eine Variable fehlt.

Gibt es hier eine Lösung?

 

Leider nein. Das Ticket Shopware Issuetracker ist zwar bereits eingeplant, aber noch keiner Version zugewiesen.
Gerade wieder einen Kunden im Ticket, der das Problem hat.

 

Gibt es einen Workaround oder eine andere Lösung?

Ich habe mit dem Custom Products Plugin das gleiche Problem und kann dieses nicht aktivieren. Hat jemand das Problem bereits lösen können?

Plugin Aktivierung ist fehlgeschlagen
Plugin konnte auf Grund der Fehlermeldung "Unable to compile the theme “Storefront”. Missing argument value: 

Zu Custom Products kannst du ja ein Ticket aufmachen, dann schauen die Kollegen sich das auf deinem System an.

1 „Gefällt mir“