Symfony : Cache doctrine/orm/Proxies failed to open

Ce bug n’arrive pas souvent mais pour une raison inconnue, cette erreur se déclenche.

Ici , trouvez diverses solutions qui pourraient vous aider à débugger votre application web.

Environnement où j’ai rencontré ce problème :

  • Symfony 3.3
  • FosUser
  • Serveur dédié
  • Plesk Onyx Version 17
  • CentOS Linux 7 (un vieux coucou)
  • Php 7.2 (après je l’ai passé sous 7.3)

Contexte :

Au moment de m’authentifier en tant qu’utilisateur en mode prod sur mon outil, un bug m’empêchait d’aller plus loin. J’ai regardé les logs (prod) et j’ai découvert ceci :

[2020-02-04 09:07:42] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\FatalErrorException: "Compile Error: require(): Failed opening required '/var/www/vhosts/mondomaine.com/var/cache/prod/doctrine/orm/Proxies/__CG__AppBundleEntityGroupe.php' (include_path='.:/opt/plesk/php/7.2/share/pear')" at /var/www/vhosts/ mondomaine.com/vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php line 206 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException(code: 0): Compile Error: require(): Failed opening required '/var/www/vhosts mondomaine.com/var/cache/prod/doctrine/orm/Proxies/__CG__AppBundleEntityGroupe.php' (include_path='.:/opt/plesk/php/7.2/share/pear') at /var/www/vhosts/ mondomaine.com/vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php:206)"} []

Voici les étapes que j’ai effectué pour résoudre le problème :

Solution 1

Solution 1 :

  • Vérifiez que le répertoire « Cache » soit en chmod 777.
  • Effacez les caches prod + dev
  • Effacez les sessions
  • Tentez de vous connecter sur votre outil. Si le problème persiste, passez à la solution 2

Solution 2

Si vous avez déjà la dernière version, passez à la solution 3.

  1. Mettez la dernière version de php qui est compatible avec votre Symfony (Adaptez en fonction de vos besoins).
  2. Sous Plesk (J’utilise Plesk qui est facile d’utilisation ) :
    1. Allez dans domaines puis votre domaine.com (environnement où est votre Symfony) puis Paramètres PHP
    2. Mettez en application la dernière version php (cf point 1)
    3. Assurez-vous que la include_pathdirective inclut le chemin du dossier PEAR par rapport à la version PHP sélectionnée. Par exemple, si Plesk PHP 7.3 est sélectionné, le dossier PEAR se trouve dans: .:/opt/plesk/php/7.3/share/pear
    4. Copiez le chemin du dossier PEAR include_pathet ajoutez-le dans la open_basedirdirective comme suit: {WEBSPACEROOT}{/}{:}{TMP}{/}:/opt/plesk/php/7.3/share/pear
    5. Faites « Appliquer »
    6. Enfin, vérifiez si PEAR a été activé correctement en créant le pear.php fichier dans le répertoire public du site Web avec le contenu suivant:
Correspond au point 2.2 et 2.3 ci-dessus
Correspond au point 2.4 ci-dessus

Si cette solution ne fonctionne pas, passez à la suivante.

Solution 3

Je reprends la solution de Nicolai Fröhlich de son post sur stackoverflow.com (Merci pour sa solution). Je vous mets ici la traduction en français :

  • Vous n’avez pas créé les classes proxy avant d’essayer d’accéder à votre application. Cela se fait généralement par: app/console cache:warmup –env=prod
  • La génération automatique des classes proxy est désactivée par défaut dans l’environnement prod. Vous pouvez activer la génération automatique de classes proxy similaires à l’environnement de développement en ajoutant ceci à votre configuration dans app/config/config_prod.yml :
doctrine:
    orm:
        auto_generate_proxy_classes:  true # <- change to true
	proxy_dir: '%kernel.cache_dir%/doctrine/orm/Proxies'
        proxy_namespace:      Proxies
  • Refaites un app/console cache:warmup –env=prod

Effectuer un test en tant qu’utilisateur si le problème est résolu. Pour ma part, cette solution fonctionne. Si vous tapez vos lignes de commande en mode root depuis Putty (par exemple), il est susceptible que la commande php bin/console se fasse comme ceci (changez la version php):

/opt/plesk/php/7.3/bin/php /var/www/vhosts/mondomaine.com/bin/console cache:warmup --env=prod

Pour recommencer sur de bonnes bases, n’hésitez pas à effacer les caches, logs etc.

Sources :

https://support.plesk.com/hc/en-us/articles/213926565-How-to-enable-PEAR-support-for-a-domain-in-Plesk-

https://stackoverflow.com/questions/36255440/symfony-cache-doctrine-orm-proxies-failed-to-open-stream-proxy-abstractproxyfac

Auteur MisterTeed