Anwenden von Magento CE-Patches

15

Auf der Magento- Download-Seite im Patches-Bereich

Laden Sie den Patch in Ihr Magento-Stammverzeichnis hoch und führen Sie den entsprechenden SSH-Befehl aus: Für Patch-Dateien mit der Dateierweiterung `.sh: sh patch_file_name.sh Beispiel: sh PATCH_SUPEE-1868_CE_1.7.0.2_v1.sh

Magento empfiehlt einen direkten Aufruf des shBefehls, um den Patch-Runner auszuführen. Die Dateierweiterung von .shunterstützt dies ebenfalls.

Wenn Sie sich jedoch die Spitze jeder Patch-Runner-Datei ansehen , zeigt die Shebang-Linie auf bash.

#!/bin/bash
# Patch apllying tool template
# v0.1.2
# (c) Copyright 2013. Magento Inc.
#

Der Programmierer in mir möchte der Quelldatei vertrauen, aber der Prozess will wissen, was auf der Magento-Website steht. Der Zyniker fragt sich, ob der Patch gegen die Unterschiede zwischen bash und sh getestet wurde .

Alan Storm
quelle
Der Patch-Vorgang sollte so einfach wie das Zippen von .diff-Dateien sein. REQUIRED_UTILS='sed patch'Alles was ich in den .shSkripten sehe . Die Aktualisierungsdokumente für neuere Versionen lesen sich wie Stereoanweisungen, und die Aktualisierung sollte nicht so schmerzhaft sein.
B00MER
2
Ich hole etwas blind den Patch, chmod + x und führe ihn aus. (Nun, ich überprüfe zuerst den Inhalt), aber ich führe ihn lokal aus (Mac-basierter Entwickler), damit ich vor der Bereitstellung einen Git-Zweig erstellen und ihn einem Testzweig zuweisen kann.
Barry Carlyon
3
@ B00MER Das ist knifflig. Ich stimme persönlich zu, aber für technisch versierte, aber nicht für unixversierte Leute, die Patches manuell anwenden, scheint dies ein Schritt zu weit zu sein. Ich kann die Beweggründe hinter einem Patch-Installer verstehen.
Alan Storm
Ich denke nur noch einmal darüber nach. Die shebang-Lins könnten zum Beispiel #! / Bin / php sein und sh führt "genug" aus, um die shebang-Zeile zu lesen und das Skript an das shebang'ed-Programm zu übergeben. Bezüglich des Handbuchs gilt, dass der Patch sowieso die Git Diffs enthält, so dass Sie sich "leicht" bewerben können. Aber gibt es ein Argument, um Magento zu bitten, eine Zip-Datei mit geänderten Dateien zusammen mit einem Patch bereitzustellen (was mit Ausnahme von Core-Änderungen in Ordnung ist)?
Barry Carlyon
Eine Sache noch. Die Verwendung einer anderen Dateierweiterung als .txt macht es wahrscheinlich logischer für weniger versierte Benutzer, zu vermeiden, dass Dateien ohne Erweiterung im Dateisystem des lokalen Benutzers schweben. Ich fühle mich bash und sh sind sowieso austauschbar.
Barry Carlyon

Antworten:

8

Sie müssen tatsächlich bash verwenden. In Zeile 14 des Patches, auf den Sie ausdrücklich hingewiesen haben, steht dieser Code:

if (( $? != 0 )); then

$((ist ein gültiger arithmetischer Ausdruck in XCU sh, aber ((nicht.)

Auf vielen UNIX-ähnlichen Plattformen ist dies jedoch /bin/shnur ein Symlink zu/bin/bash . Wenn shbash mit dem Namen aufgerufen wird , deaktiviert es einige seiner POSIXly-unstrict-Verhalten, aber nicht alle. Es ist wahrscheinlich, dass diese Patches für die als sh aufgerufene Bash gut funktionieren.

Kojiro
quelle
In diesem Fall wird das Skript nicht unter sh ausgeführt.
Barry Carlyon
Tatsächlich ist der Kernel für die Interpretation des Shebang verantwortlich. Wenn Sie chmod +x script && ./scriptversuchen, den Befehl in der shebang-Zeile mit der Skriptdatei als erstem oder zweitem Argument auszuführen, versucht der Kernel. Abhängig von den Umständen kann nicht garantiert werden, dass eine Shell an diesem Prozessbaum beteiligt ist. Wenn Sie jedoch shmit einem Skript als Argument ausführen , wird die shebang-Zeile ignoriert.
Kojiro
Das bedeutet, dass ich die Patch-Anweisungen falsch befolge. Wie sie sagen, sh Skript, aber ich tue nur ./script Wie amüsant
Barry Carlyon
-2

Für den Fall, dass es jemandem in Zukunft hilft, habe ich Phpstorm zum Anwenden von Patches verwendet und das Patch-Tool ist großartig. Es dauerte weniger als 30 Sekunden, um den Patch ohne Probleme anzuwenden, und Sie können auch die Unterschiede sehen und durchgehen, die die Dateien aufweisen.

Codelogn
quelle