AWS Elastic Beanstalk - PHP 脚本在部署新版本后无法执行

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk - PHP 脚本在部署新版本后无法执行【英文标题】:AWS Elastic Beanstalk - PHP script fails to execute after deploying new version 【发布时间】:2012-10-25 12:00:47 【问题描述】:

我正在使用适用于 php 的 AWS Elastic Beanstalk,它使用 Apache Web 服务器管理 1 个 EC2 linux 服务器。

通过管理控制台部署不同版本(包含我所有 php 脚本的 zip 文件)时,我有时会遇到奇怪的情况。

在某些情况下,即使我部署的版本与以前都可以正常工作的脚本完全相同,但其中一些突然无法正常工作。当再次部署另一个版本时(仍然是相同的脚本,相同的内容),突然一切都正常了。

有问题的服务示例:

<?php
// dynamically loads needed classes
    function __autoload($class_name) 
        include $class_name . '.php';
    
    $response = new Response();

    $response->data = array('platform_version' => Configuration::PLATFORM_VERSION);
    die(json_encode($response));
?>

通常,此脚本返回一个 json 对象。在没有更改任何内容并部署版本之后,此脚本不会返回任何内容。有没有办法判断是否发生了错误?

顺便说一句,我可以在 Apache 的 application_access_log 中看到对该服务的调用,返回状态为 200。

编辑: 更改 Web 服务器上的错误级别后,我开始在 application_error_log 中看到有趣的信息:

*[Mon Nov 05 17:19:44 2012] [error] [client 10.210.159.209] PHP 致命错误:require_once() [function.require-once]:无法在 /var/ 中重新声明类响应www/html/InstallerLog.php 第 12 行 [2012 年 11 月 5 日星期一 17:19:44] [错误] [客户端 10.210.159.209] PHP 堆栈跟踪: [2012 年 11 月 5 日星期一 17:19:44] [错误] [客户端 10.210.159.209] PHP 1. main() /var/www/html/InstallerLog.php:0*

为什么会出现这个错误? 我正在使用:

require_once 'Response.php';

在我的脚本中,据我所知,这种错误不应该发生......

【问题讨论】:

我也改了php.ini文件显示各种错误(***.com/questions/5050426/…),还是什么都没有(白屏) 你有 error_reporting 吗?你检查过你的 Apache 错误日志吗? 【参考方案1】:

好的。所以最终它是非常基本的。

发生错误是因为我使用的类名“Response”已在其他地方使用(不在我的代码中,可能在 SDK 或类似的东西中)。 将名称更改为不太通用的名称后,该错误不再发生。 为了安全起见,我还添加了:

if(!class_exists('MyNewResponse'))

在创建类之前。

【讨论】:

以上是关于AWS Elastic Beanstalk - PHP 脚本在部署新版本后无法执行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Elastic Beanstalk 上配置我的 WSGI 应用程序的名称?

AWS Elastic Beanstalk Python (3.8) 平台:除了使用 `requirements.txt` 之外,为带有 `--no-deps` 标志的 Python 包运行额外的 p

Amazon Elastic BeanStalk 错误:无法创建 AWS Elastic Beanstalk 应用程序版本

[AWS] Elastic Beanstalk

AWS Elastic Beanstalk CLI 安装错误

text AWS Elastic Beanstalk