【问题标题】:Why am I experiencing a weird execution case with my CakePHP Shell?为什么我的 CakePHP Shell 会出现奇怪的执行情况?
【发布时间】:2013-06-11 08:26:33
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 生产环境在linux上,dev在windows上?或者更确切地说,开发文件是否在开发环境中不区分大小写的文件系统上?
  • 不,我所有的环境都是基于 Unix 的。我在我自己的答案下面发布了解释我如何解决这个问题的方法。只是一个符号链接引起了我的痛苦! ;)

标签: php shell unix cakephp-2.0


【解决方案1】:

好的,所以没有人知道如何提供帮助,但我自己做了;)

对于那些遇到这种行为的人,我建议您在代码中验证系统 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 的资源,因为在将我的代码更改为没有此符号链接的路径后,它起作用了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多