Docker/ddev - Installation Module mit Oxid 6.4

Hallo,

ich habe unter docker/ddev (beides aktuellste Versionen) den OXID-Shop 6.4 installiert.

Mit ddev composer update wurde der Shop erfolgreich installiert und konnte dann auch das Setup ausführen.

Jedoch hatte ich eine Fehlermeldung bekommen, die wohl erstmal folgenlos blieb. Nun ist es so, dass wenn ich ein Modul installieren möchte, der Fehler wieder kommt und das Modul nicht installiert. Die Module werden auch über composer installiert und auf der Ebene von source und var im Ordner packages gepackt.

Updating dependencies
Nothing to modify in lock file
Installing dependencies from lock file (including require-dev)
Nothing to install, update or remove
Package oyejorge/less.php is abandoned, you should avoid using it. No replacement was suggested.
Package topconcepts/oxid-klarna-6 is abandoned, you should avoid using it. Use fatchip-gmbh/oxid-klarna-6 instead.
Package webmozart/path-util is abandoned, you should avoid using it. Use symfony/filesystem instead.
Package phpunit/php-token-stream is abandoned, you should avoid using it. No replacement was suggested.
Generating autoload files
64 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Generating OXID eShop unified namespace classes ... Done
Deprecation Notice: The "" service relies on the deprecated "OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\DataMapper\ModuleConfiguration\ClassesWithoutNamespaceDataMapper" class. It should either be deprecated or its implementation upgraded. in /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:1182
Deprecation Notice: A tree builder without a root node is deprecated since Symfony 4.2 and will not be supported anymore in 5.0. in /var/www/html/vendor/symfony/config/Definition/Builder/TreeBuilder.php:30
Deprecation Notice: The "Symfony\Component\Config\Definition\Builder\TreeBuilder::root()" method called for the "shopConfiguration" configuration is deprecated since Symfony 4.3, pass the root name to the constructor instead. in /var/www/html/vendor/symfony/config/Definition/Builder/TreeBuilder.php:51
Update operation will overwrite bestit/amazonpay4oxid files in the directory source/modules. Do you want to overwrite them? (y/N) 
In QuestionHelper.php line 114:
                                                                                                    
  [Error]                                                                                           
  Call to undefined method Symfony\Component\Console\Question\Question::getAutocompleterCallback()  
                                                                                                    

Exception trace:
  at phar:///usr/local/bin/composer/vendor/symfony/console/Helper/QuestionHelper.php:114
 Symfony\Component\Console\Helper\QuestionHelper->doAsk() at phar:///usr/local/bin/composer/vendor/symfony/console/Helper/QuestionHelper.php:67
 Symfony\Component\Console\Helper\QuestionHelper->ask() at phar:///usr/local/bin/composer/src/Composer/IO/ConsoleIO.php:275
 Composer\IO\ConsoleIO->ask() at /var/www/html/vendor/oxid-esales/oxideshop-composer-plugin/src/Installer/Package/AbstractPackageInstaller.php:201
 OxidEsales\ComposerPlugin\Installer\Package\AbstractPackageInstaller->askQuestion() at /var/www/html/vendor/oxid-esales/oxideshop-composer-plugin/src/Installer/Package/ModulePackageInstaller.php:78
 OxidEsales\ComposerPlugin\Installer\Package\ModulePackageInstaller->update() at /var/www/html/vendor/oxid-esales/oxideshop-composer-plugin/src/Installer/PackageInstallerTrigger.php:81
 OxidEsales\ComposerPlugin\Installer\PackageInstallerTrigger->updatePackage() at /var/www/html/vendor/oxid-esales/oxideshop-composer-plugin/src/Plugin.php:108
 OxidEsales\ComposerPlugin\Plugin->updatePackages() at n/a:n/a
 call_user_func() at phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:202
 Composer\EventDispatcher\EventDispatcher->doDispatch() at phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:125
 Composer\EventDispatcher\EventDispatcher->dispatchScript() at phar:///usr/local/bin/composer/src/Composer/Installer.php:372
 Composer\Installer->run() at phar:///usr/local/bin/composer/src/Composer/Command/UpdateCommand.php:241
 Composer\Command\UpdateCommand->execute() at phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.php:298
 Symfony\Component\Console\Command\Command->run() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:1024
 Symfony\Component\Console\Application->doRunCommand() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:299
 Symfony\Component\Console\Application->doRun() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:335
 Composer\Console\Application->doRun() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:171
 Symfony\Component\Console\Application->run() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:130
 Composer\Console\Application->run() at phar:///usr/local/bin/composer/bin/composer:88
 require() at /usr/local/bin/composer:29

update [--with WITH] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--dry-run] [--dev] [--no-dev] [--lock] [--no-install] [--no-autoloader] [--no-suggest] [--no-progress] [-w|--with-dependencies] [-W|--with-all-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-i|--interactive] [--root-reqs] [--] [<packages>...]

composer [update] failed, composer command failed: exit status 1. stderr=

Zu diesem Fehler gab es bereits einen Thread, der jedoch geschlossen wurde. Da wurde zuletzt geschrieben, dass man composer geupdatet hat. Hier habe alles auf den Neuesten stand. Nun weiß ich nicht mehr weiter.

Folgende Quellen habe ich genutzt und schon ausprobiert:

https://docs.oxid-esales.com/developer/en/6.4/development/modules_components_themes/module/tutorials/module_setup.html

https://docs.oxid-esales.com/developer/en/6.4/development/modules_components_themes/module/skeleton/metadataphp/index.html

README.md der Module gelesen und befolgt.

Moin @O-Schumiel

ich würde vermuten dies liegt an der Composer Version. Diese ist in Deiner DDEV Umgebung wahrscheinlich zu Neu.

Dort könntest probieren

ddev composer self-update 2.2.13
ddev composer update

Viele Grüße
Tim

1 Like

Ja, das ist es gewesen. Ich hatte die Version 2.3.6

1 Like

Ich wollte nun gerade CE 6.0 installieren.

Danach ddev composer install

Danach erhalte ich folgende Fehlermeldung:

Your requirements could not be resolved to an installable set of packages.
 
Problem 1
    - Root composer.json requires oxid-esales/oxideshop-composer-plugin ^v2.0.0 -> satisfiable by oxid-esales/oxideshop-composer-plugin[v2.0.0, ..., v2.0.4].
    - oxid-esales/oxideshop-composer-plugin[v2.0.0, ..., v2.0.4] require composer-plugin-api ^1.0 -> found composer-plugin-api[2.3.0] but it does not match the constraint.
  Problem 2
    - Root composer.json requires oxid-esales/testing-library dev-master -> satisfiable by oxid-esales/testing-library[dev-master].
    - oxid-esales/testing-library dev-master requires php ^8.0 -> your php version (7.4.29) does not satisfy that requirement.
  Problem 3
    - oxid-esales/oxideshop-ide-helper[v3.0.0, ..., v3.1.2] require composer-plugin-api ^1.1.0 -> found composer-plugin-api[2.3.0] but it does not match the constraint.
    - Root composer.json requires oxid-esales/oxideshop-ide-helper ^3.0 -> satisfiable by oxid-esales/oxideshop-ide-helper[v3.0.0, v3.1.0, v3.1.1, v3.1.2].

Mir sagt das im allgemeinen schon alles etwas. Aber ich kann jetzt nicht anfangen, in der composer.json andere Werte zu setzen. Vor allem, warum wird bei einer lib php8.0 verlangt?

Ich hatte auch versucht, mit der composer-Version 1.10 - aber bringt alles nichts.

Was muss ich hier tun?

Probiere mal:

composer install --ignore-platform-reqs

composer update --ignore-platform-reqs

Danke. Hat aber leider nichts gebracht. Die Fehlermeldungen sind die Gleichen.

Nachdenken.

Wahrscheinlich hast manuell nur die Version des Shops in der composer.json Datei geändert. Dies reicht aber bei dem Befehl ddev composer install nicht aus, weil Du damit auch die DEV-Requires mit installierst.

Also entweder aktualisierst auch noch die zugehörigen DEV-Requires in Deiner composer.json bevor Du ddev composer install machst oder installierst ohne DEV über ddev composer install --no-dev.

Nein. Ich habe nicht nur die composer.json ausgetauscht. Sondern wie beschrieben, die ganze source von CE 6.0.0 (GitHub - OXID-eSales/oxideshop_ce at b-6.0.x) genommen. Auch mit ddev composer install --no-dev erhalte ich die gleichen Fehlermeldungen.

Du schreibst von “Deiner composer.json”. Es ist ja nicht meine. Sondern diese habe ich von OXID kopiert. Ggf. könnte ich sie nun so verändern, dass die Fehlermeldungen weg sind, aber dazu fehlt mir das OXID-Wissen, dass es nicht zu irgendwelchen Wechselwirkungen kommt. Zudem ist das auch nicht der richtige Weg, das ich jetzt anfange, in der composer.json irgendetwas zu ändern.

Aber wenn man sich die gelieferte composer.json und die Fehlermeldungen anschaut, dann kann es doch gar nicht funktionieren. Allein durch oxid-esales/testing-library muss doch bei jedem, der sich jetzt OXID CE 6.0.x aufsetzt, die gleiche Fehlermeldung erhalten, indem php8.0 gefordert wird.

Wenn ich CE 6.4 installiere, klappt alles direkt und ohne Probleme.

CE OXID 6.2.x lässt sich installieren.

Bei CE OXID 6.2.x steht z.B. “OXID-esales/testing-library”: “^v7.3.0”. Bei 6.0 steht dev-master drin. Das heißt, kann man bedenkenlos die Versionen aus CE 6.2.x nehmen für 6.0?

Warum sind diese beiden Dateien unterschiedlich?

Ich hatte die Erstere gezogen, siehe oben meinen Verweis dazu.

Nutze ich nun den zweiten Link, ist der Fehler mit dem testing-library weg, weil dort kein dev-master drin steht. Nun erhalte ich folgende Fehlermeldung:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires oxid-esales/oxideshop-composer-plugin ^v2.0.0 -> satisfiable by oxid-esales/oxideshop-composer-plugin[v2.0.0, ..., v2.0.4].
    - oxid-esales/oxideshop-composer-plugin[v2.0.0, ..., v2.0.4] require composer-plugin-api ^1.0 -> found composer-plugin-api[2.3.0] but it does not match the constraint.
  Problem 2
    - oxid-esales/oxideshop-unified-namespace-generator v1.0.0-beta.1 requires composer-plugin-api ^1.0 -> found composer-plugin-api[2.3.0] but it does not match the constraint.
    - oxid-esales/oxideshop-unified-namespace-generator[v1.0.0-beta.2, ..., v1.0.0] require composer-plugin-api ^1.1.0 -> found composer-plugin-api[2.3.0] but it does not match the constraint.
    - Root composer.json requires oxid-esales/oxideshop-unified-namespace-generator ^1.0.0 -> satisfiable by oxid-esales/oxideshop-unified-namespace-generator[v1.0.0-beta.1, ..., v1.0.0].

Daher einfach jetzt meine Frage, welchen Branch oder Tags muss ich nutzen, um CE 6.0 zu installieren? Womöglich sind die beiden Verweise falsch?

Ich habe die Lösung.

Nutze:

Danach

ddev composer self-update --1

ddev composer install

OXID wird damit installiert.

Ist sowas irgendwo dokumentiert? Ich habe das in keiner Doku von OXID finden können.

Damit meine ich die composer.json aus Deiner Shop Instanz welche auf der gleiche Ebene wie source, vendor und var Verzeichnis liegt. Diese Datei gilt es zupflegen und ist shopspezifisch auf Dein Projekt.

Dort musst neben require auch dev-require im Blick haben. Zu Beginn legt man sich sein Projekt über Composer an, dabei werden diese beide Werte gefüllt bzw. ausgecheckt. Sobald man Änderungen vornimmt wie z.B. Module installiert oder Updates/Downgrades durchführt gilt es auch die dev-require im Blick zu haben.

Das sind zwei bewusste unterschiedliche Versionen. Das ist nach dem Composer Prinzip:

  • 6.0.x holt immer die aktuellste Version welche vorhanden
  • 6.0.0 holt Dir die exakte Version 6.0.0

Im Detail:

6.0.x hat einen z.B. zu Beginn die Beta Versionen oder Release Kandidaten geholt als es die 6.0.0 noch nicht gab. Aber da es z.B. keine 6.0.1 oder höher gibt. Holen aktuell beide Tags die gleiche Version die 6.0.0.

Quelle: oxid-esales/oxideshop-ce - Packagist

Kannst beide verwenden. Nein, die sind nicht falsch.

Ja, dies ist dokumentiert.

If you are using Composer 2, what is possible with an update to OXID eShop 6.2.3 or higher, you need to update the IDE Helper in require-dev section as well.

Quelle: Standard update — OXID eShop 6.2 | User documentation

OXID eSales kann nichts dafür wenn man so spät dran ist um eine Migration von 4.10 auf 6.4 durchzuführen. Das sich Dinge in der Zwischenzeit ändern dürfte jedem klar sein.

Zum Stand als die 6.0 erschienen ist gab es noch kein Composer 2. Klar könnte man dies nachträglich in der Dokumentation noch ergänzen. Aber dafür gibt es Experten, Agenturen und Freelancer welche sich intensiv mit dem Thema beschäftigen und einen diesen Aufwand sparen können.

Zur Not wird an in diesem Forum geholfen.

Fazit sich Gedanklich mehr mit Composer beschäftigen, wenn man darüber selber Änderungen an einem Shop vornehmen möchte.

Dabei sollte man überlegen welches Wissen man für welchen Anwendungsfall benötigt.

Für manch einen Händler*in könnte es ausreichen zu wissen wie man Module installiert und aktualisiert.

Bei einer Migration oder Update sollte man sich fachmännische Unterstützung holen, wenn man mehrere Jahre keine Updates gefahren ist. Dies spart einen viel Zeit und Nerven.

1 Like

Danke. Du hast das sehr gut aufgeklärt.

Mit dem composer war mir bekannt und hatte ich am Mittwoch und gestern auf Version 1 gedowngradet. Hauptproblem war das ich die falsche source genommen habe. Am Ende, wenn man es nach einigen wenigen Stunden nichts ans Laufen bekommt, probiert man viel aus und vergisst dann dies und jenes wieder zurück zusetzen. Man wird etwas kirre im Kopf.

Ich möchte OXID gern lernen, weil ich einiges besser finde, als in anderen Shops. Das es zu Anfangsschwierigkeiten kommt, weil ich hierzu noch etwas grün hinter den Ohren bin, damit muss ich rechnen. Bisher, und da gebe ich dir recht, wird hier sehr gut geholfen. Dafür ein großes Dankeschön und auch zugleich ein Sorry für deine/eure Geduld.

1 Like

Sehr gerne. Das man Sachen wieder vergisst kenne ich auch. Da sind wir alle Menschen :slight_smile:

1 Like