Pourquoi est-ce que je rencontre un cas d’exécution étrange avec mon shell CakePHP?

J’utilise CakePHP (v2) Shell pour exécuter un processus derrière mon application en ligne. Ce shell fait partie d’un plugin, donc stocké dans:

app/Plugins/MyPlugin/Console/Command/MyScriptShell.php 

J’ai utilisé 2 serveurs de développement différents, et tout se passe bien avec l’exécution de ce shell.

Malheureusement, l’exécution échoue sur mon environnement de production.

Sur un terminal Unix, si j’essaie manuellement d’exécuter la commande ci-dessous, cela échoue:

 # app/Console/cake MyPlugin.MyScript helloworldfunction [params1, paramsN] -app app PHP Fatal error: Class 'Controller' not found in /var/www/app/Controller/AppController.php on line 6 

De l’autre côté, si j’exécute la même ligne de commande avec un “sudo -u {a-unix-user} {command}” , l’exécution fonctionne! Voici 2 exemples qui fonctionnent:

 # sudo -u www-data app/Console/cake MyPlugin.MyScript helloworldfunction [params1, paramsN] -app app # sudo -u root app/Console/cake MyPlugin.MyScript helloworldfunction [params1, paramsN] -app app 

Ok, remarquant ce comportement, j’ai pensé à un problème de droits Unix ou quelque chose comme ça. J’ai décidé, en tant que nouveau test, d’accorder une session unix de www-data dans mon termina pour exécuter la même commande, mais sans la directive “sudo -u {a-unix-user} {command}”. Malheureusement, cela échoue aussi:

 # sudo su www-data www-data# whoami www-data www-data# app/Console/cake MyPlugin.MyScript helloworldfunction [params1, paramsN] -app app PHP Fatal error: Class 'Controller' not found in /var/www/app/Controller/AppController.php on line 6 www-data# 

Voici donc un résumé du problème que je rencontre en ce moment … Une idée sur la façon de résoudre ce comportement étrange?

Merci.

Ok, donc personne n’a trouvé comment aider, mais je l’ai fait moi-même;)

Pour ceux qui éprouvent un tel comportement, je vous recommande de vérifier le système PATHS défini comme variable dans votre code. Dans mon cas, dans bootstrap.php, j’ai un fichier WWW_PATH qui contient le chemin local pour atteindre la base du répertoire de code.

 define('WWW_PATH', '/home/foo/www-prod/www/'); 

En réalité, mon répertoire de code se trouve sous / var / www-prod / www / et / home / foo / www-prod est juste un lien symbolique unix.

Il semble que CakePhp Shell ne puisse pas charger correctement une ressource avec un BASE_DIR en utilisant un lien symbolique, car après avoir modifié mon code sans ce lien symbolique dans le chemin, cela a fonctionné!