为什么我的CakePHP Shell遇到了一个奇怪的执行案例?

时间:2013-06-14 16:02:29

标签: php shell unix cakephp-2.0

我使用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#

所以这里是我现在正在发生的问题的摘要...... 任何想法如何解决这种奇怪的行为?

感谢。

1 个答案:

答案 0 :(得分:0)

好的,所以没有人找到如何帮助,但我自己做了;)

对于遇到此类行为的人,我建议您将系统PATHS设置为代码中的变量。 在我的例子中,在bootstrap.php中,我有一个WWW_PATH定义,它包含到达代码目录库的本地路径。

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

实际上,我的代码目录位于 / var / www-prod / www / 下,而 / home / foo / www-prod 只是一个unix符号链接。

似乎CakePhp Shell无法使用符号链接使用BASE_DIR正确加载ressource,因为在将此符号链接改为路径后更改我的代码后,它就可以了!