Die Aufwärmphase des Symfony-Cache während des Container-Image-Erstellungsprozesses wird nicht korrekt benannt
Posted: 03 Jan 2025, 15:45
Ich habe eine Symfony-Anwendung, die in einem Container gespeichert ist.
Der letzte Schritt des Prozesses besteht darin, den Cache aufzuwärmen, damit das Bild „wie es ist“ verwendet werden kann. Während der Befehl scheinbar gut funktioniert, ist das Endergebnis, dass es zwei Cache-Verzeichnisse für die Umgebung gibt, eines mit dem richtigen Namen und eines mit einer Tilde (~).
Einige Verzeichnisse fehlen im Cache-Verzeichnis mit dem „richtigen“ Namen, was dazu führt, dass die Anwendung fehlschlägt.
Dies sind die Dockerfile-Schritte, in denen die Cache ist aufgewärmt:
Wenn ich rm -rf var/cache/prod && mv var/cache/pro~ var/cache/prod manuell ausführe, funktioniert die Anwendung normal ... aber ich Ich habe Angst, mich darauf zu verlassen, da dies kein normales oder erwartetes Verhalten zu sein scheint.
Wenn ich nach dem Start der Anwendung bin/console cache:clear, jetzt funktioniert die Anwendung, aber das erfordert uns nach der Bereitstellung des neuen Images einen Befehl auszuführen, was zu einer Ausfallzeit von ein paar Sekunden bei jeder Bereitstellung führt, was unerwünscht ist.
Warum wird der Befehl „cache:clear“ nicht korrekt beendet? Warum wurde es ohne Fehler beendet, wenn es nicht korrekt beendet wurde?
Und jetzt etwas Dummes. Wenn ich das mache (cache:clear zweimal ausführen):
Jetzt funktioniert es und es gibt ein einziges Cache-Verzeichnis
Der letzte Schritt des Prozesses besteht darin, den Cache aufzuwärmen, damit das Bild „wie es ist“ verwendet werden kann. Während der Befehl scheinbar gut funktioniert, ist das Endergebnis, dass es zwei Cache-Verzeichnisse für die Umgebung gibt, eines mit dem richtigen Namen und eines mit einer Tilde (~).
Code: Select all
root@c238674823ae:/app/var/cache# ls -la
total 0
drwxr-xr-x 1 root root 16 Jan 2 11:46 .
drwxr-xr-x 1 root root 72 Jan 2 11:46 ..
drwxr-xr-x 1 root root 146 Jan 2 11:46 prod
drwxr-xr-x 1 root root 146 Jan 2 11:46 pro~
Dies sind die Dockerfile-Schritte, in denen die Cache ist aufgewärmt:
Code: Select all
ENV COMPOSER_MEMORY_LIMIT=-1
RUN set -eux; \
mkdir -p var/cache var/log; \
composer dump-autoload -o --apcu --no-dev; \
composer dump-env prod; \
chmod +x bin/console; sync;
RUN set eux; \
rm -rf var/cache/* && \
bin/console cache:clear && \
bin/console assets:install public && \
bin/console importmap:install && \
bin/console sass:build -v && \
bin/console asset-map:compile;
Wenn ich nach dem Start der Anwendung bin/console cache:clear, jetzt funktioniert die Anwendung, aber das erfordert uns nach der Bereitstellung des neuen Images einen Befehl auszuführen, was zu einer Ausfallzeit von ein paar Sekunden bei jeder Bereitstellung führt, was unerwünscht ist.
Warum wird der Befehl „cache:clear“ nicht korrekt beendet? Warum wurde es ohne Fehler beendet, wenn es nicht korrekt beendet wurde?
Und jetzt etwas Dummes. Wenn ich das mache (cache:clear zweimal ausführen):
Code: Select all
RUN set eux; \
rm -rf var/cache/* && \
bin/console cache:clear && \
bin/console cache:clear && \
bin/console assets:install public && \
bin/console importmap:install && \
bin/console sass:build -v && \
bin/console asset-map:compile;

Code: Select all
docker run -it web-api/env-prod:local ls -la var/cache
total 0
drwxr-xr-x 1 root root 8 Jan 2 12:11 .
drwxr-xr-x 1 root root 72 Jan 2 12:11 ..
drwxr-xr-x 1 root root 170 Jan 2 12:11 prod