我使用 CakePHP (v2) Shell 在我的在线应用程序后面执行一个进程。此 Shell 是插件的一部分,因此存储在:
app/Plugins/MyPlugin/Console/Command/MyScriptShell.php
我使用了 2 个不同的开发服务器,这个 Shell 的执行一切顺利。
不幸的是,在我的生产环境中执行失败。
在 Unix 终端上,如果我尝试手动执行以下命令,则会失败:
# 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
另一方面,如果我使用"sudo -u {a-unix-user} {command}"执行相同的命令行,则执行有效!以下是2 个有效的示例:
# 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
好的,所以注意到这种行为,我想到了一个 unix 权利问题或类似的东西。作为一项新测试,我决定在我的终端中授予 www-data 的 unix 会话来执行相同的命令,但没有“sudo -u {a-unix-user} {command}”指令。不幸的是,这也失败了:
# 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#
所以这里是我现在正在发生的问题的总结......知道如何解决这种奇怪的行为吗?
谢谢。