Workflow dev -> staging -> prod | Theme-Probleme

Hallo zusammen,

mich würde interessieren, wie sich hier die Workflows gestalten und stelle meinen und das Problem daran hier vor:
Mein Plan ist, lokal zu entwickeln, dann einem Online-Staging zuzuführen um einer Testgruppe die Möglichkeit zu geben, neue Features und Änderungen zu testen und dann als Release in die Produktiv-Umgebung zu übergeben.

Das Setup:

eine lokale Development-Umgebung über vagrant aufgebaut. Version: v6.1.9 Stable Version 999999.9999999
Als Staging habe ich die Produktiv-Umgebung per Zip-Download Shopware auf einer Ubuntu 18.04 als Cloud-Server laufen. Version: v6.1.1 Stable Version
Produktiv ist noch nicht eingerichtet.

Beide eingerichteten Umgebungen laufen einwandfrei.

Ich hab also munter angefangen in der Developement ein Theme anzulegen und die zu ändernden Dateien per 

{% sw_extends '@Storefront/storefront/component/product/card/action.html.twig' %}

zu erweitern oder Blöcke umzustellen. Das hat auch alles wunderbar funktioniert.

Das Problem

Um Änderungen jetzt für das Staging zu übergeben benutze ich Git (Feature-Branch-Workflow) Auch das hat über das Remote-Repsoitory funktioniert.
Ich hab das Theme dann über bin/console installiert, aktiviert und registriert und konnte es im Backend dem entsprechenden Verkaufskanal zu weisen.
Das Ergebnis von Dev zu Staging in zwei Bildern im Vergleich:

Wenn ich jetzt in der Produktivumgebung, die den Fehler “Leider ist etwas schief gelaufen” wirft, in der .env-Datei mittels APP_ENV=prod in den dev-Modus gehe (APP_ENV=dev), laden die Änderungen aus dem Theme wieder ohne Probleme richtig.

Fragen:

  1. Woran liegt das und wie kann man das vermeiden / umgehen?
  2. Macht der Workflow so überhaupt Sinn?

 

Danke schonmal an alle im Voraus

Was steht denn überhaupt für eine Fehlermeldung im Log? Das wäre erstmal grundsätzlich interessant.

Also mal in var/log/prod_ schauen und die genaue Fehlermeldung hier posten.

Hallo Moritz,

die Fehlermeldung, die wohl den Bereich des Warenkorbs im Header betrifft:

 

[2020-02-03 22:28:20] request.CRITICAL: Uncaught PHP Exception Twig\Error\RuntimeError: "An exception has been thrown during the rendering of a template ("Failed to create "/var/www/vhosts/meine-domain.de/shopware/var/cache/prod_h1b7726e6c95d19c88e11911bd4fd5a17/translations": mkdir(): Permission denied.")." at /var/www/vhosts/meine-domain.de/shopware/vendor/shopware/storefront/Resources/views/storefront/layout/header/actions/cart-widget.html.twig line 9 {"exception":"[object] (Twig\\Error\\RuntimeError(code: 0): An exception has been thrown during the rendering of a template (\"Failed to create \"/var/www/vhosts/meine-domain.de/shopware/var/cache/prod_h1b7726e6c95d19c88e11911bd4fd5a17/translations\": mkdir(): Permission denied.\"). at /var/www/vhosts/meine-domain.de/shopware/vendor/shopware/storefront/Resources/views/storefront/layout/header/actions/cart-widget.html.twig:9, Symfony\\Component\\Filesystem\\Exception\\IOException(code: 0): Failed to create \"/var/www/vhosts/meine-domain.de/shopware/var/cache/prod_h1b7726e6c95d19c88e11911bd4fd5a17/translations\": mkdir(): Permission denied. at /var/www/vhosts/meine-domain.de/shopware/vendor/symfony/filesystem/Filesystem.php:105)"} []

In der cart-widget.html.twig habe ich folgende Anpassungen vorgenommen:
 

{% sw_extends '@Storefront/storefront/layout/header/actions/cart-widget.html.twig' %}

{# *****************************************************
Schaltet den Preis beim Warenkorbsymbol im Header aus

********************************************************* #}


{% block layout_header_actions_cart_widget %}

    
         {% if context.customer == null %}
         Preis erst nach Login
        {% else %}
        {{ page.cart.price.positionPrice|currency }}{{ "general.star"|trans|sw_sanitize }}
        {% endif %}
    
{% endblock %}

Danach und davor stehen jede Menge dieser Einträge:

 

[2020-02-03 22:28:20] cache.WARNING: Failed to save key "f59f42536997e99482e3408073e0aa1e" of type Shopware\Core\System\Language\LanguageCollection: file_put_contents(/var/www/vhosts/meine-domain.de/shopware/var/cache/prod_h1b7726e6c95d19c88e11911bd4fd5a17/pools/f5mi57D4rH/5e389e845c7dc8.59293677): failed to open stream: Permission denied {"key":"f59f42536997e99482e3408073e0aa1e","exception":"[object] (ErrorException(code: 0): file_put_contents(/var/www/vhosts/meine-domain.de/shopware/var/cache/prod_h1b7726e6c95d19c88e11911bd4fd5a17/pools/f5mi57D4rH/5e389e845c7dc8.59293677): failed to open stream: Permission denied at /var/www/vhosts/meine-domain.de/shopware/vendor/symfony/cache/Traits/FilesystemCommonTrait.php:96)"} []

 

 

Also beide Fehlermeldungen klingen so, als könnte SW keine Dateien erzeugen im eigenen Verzeichnis.

Am besten prüfst du mal, dass nach dem Deploy der Besitzer der Dateien auch der Benutzer ist, der den Webserver/PHP Prozess ausführt.

Moin!

Ich würde gerne diese Frage nochmal hervor holen, da mir der Workflow auch noch nicht ganz klar ist. Vor allem nicht nach bisher eher mäßigen Erfolgen um in lokaler Dev Umgebung entwickelte Theme-Plugins bzw normale Plugins auf eine Shopware (Prod/Stage) Instanz zu bringen. Entweder gibt es solch Fehler wie bei heinel oder es werden bei neuen Plugins nicht die nötigen JS kompiliert.

Offensichtlich reicht es nicht nur Plugins unter custom/plugins abzulegen und diese im Admin zu installieren/updaten. Müssen zwangsweise Scripte und Cache-Bereinigungen manuell ausgeführt werden? Immerhin ist das oft nur eingeschränkt möglich, wenn auf dem System kein node verfügbar ist.

Oder, um jetzt endlich die Frage von heinel wieder aufzugreifen, wird es in Dev/Production-Template alles kompiliert und kopiert und dann kopiert man am Ende nur noch Plugins und public auf den Prod-Server? Oder gleich das ganze (geforkte) Production-Template mit allen Anpassungen per git clone/pull auf den Server?

Wäre toll, wenn jemand das mal kurz skizzieren könnte.

Vielen Dank!

Ich entwickle Lokal auf einer Dev Umgebung -> Auch via Vagrant

GIT nutze ich ausschließlich nur für die Entwicklung

Auf dem Dev System exportiere ich mir ein Production Zipfile -> eigenbau (Dev- Git und node_modules Ordner werden beim Packen ausgeschlossen)

Das Zipfile deploye ich über den Pluginmanager auf dem Staging / Production System

Cache leere ich immer über SSH -> das nervt mich schon ab

Zu der Fehlermeldung kann ich nix sagen  Grin