Elastic Beanstalk 上的“laravel.log 无法打开”错误

Posted

技术标签:

【中文标题】Elastic Beanstalk 上的“laravel.log 无法打开”错误【英文标题】:"laravel.log could not be opened" error on Elastic Beanstalk 【发布时间】:2020-09-28 06:41:22 【问题描述】:

我在 AWS ElasticBeanstalk 上部署了一个 Laravel 应用程序(php 7.3 在 64 位 Amazon Linux/2.9.7 上运行)。 应用程序在运行时运行良好,但对于少数请求会随机抛出以下错误。

PHP 致命错误:未捕获的 UnexpectedValueException:流或 文件“/var/app/current/storage/logs/laravel.log”无法打开: 无法打开流:权限被拒绝 /var/app/current/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:110\n堆栈 跟踪:\n#0 /var/app/current/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(42): Monolog\Handler\StreamHandler->write(Array)\n#1 /var/app/current/vendor/monolog/monolog/src/Monolog/Logger.php(323): Monolog\Handler\AbstractProcessingHandler->handle(Array)\n#2 /var/app/current/vendor/monolog/monolog/src/Monolog/Logger.php(541): Monolog\Logger->addRecord(400, 'Unhandled Excep...', Array)\n#3 /var/app/current/vendor/laravel/framework/src/Illuminate/Log/Logger.php(174): Monolog\Logger->error('Unhandled Excep...', Array)\n#4 /var/app/current/vendor/laravel/framework/src/Illuminate/Log/Logger.php(87): Illuminate\Log\Logger->writeLog('error', 'Unhandled Excep...', 数组)\n#5 /var/app/current/vendor/laravel/framework/src/Illuminate/Log/LogManager.php(54 在 /var/app/current/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php 110号线

我不明白为什么它只对某些请求而不是其他请求抛出错误。尽管如此,我尝试按照以下 .ebextensions 的一些帖子的建议将权限应用于存储和引导文件夹,但没有得到它的工作。

"/opt/elasticbeanstalk/hooks/appdeploy/post/99_make_storage_writable.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      echo "Making /storage and /bootstrap writeable..."
      chmod -R 777 /var/app/current/storage
      chmod -R 777 /var/app/current/bootstrap 

有人可以帮我吗?我对 Laravel 和 AWS 都很陌生,对这里可能出现的问题非常困惑。

【问题讨论】:

您的应用是否以 root 身份运行?您是否尝试仅删除日志文件并查看它是否会自行创建一个新文件? @ahackney 该应用程序以 ec2-user 身份运行(使用“ps aux | grep apache”获取用户)。删除了文件,它自己创建了一个新文件。 我已启用将日志收集到尾日志和捆绑日志中,这会产生任何问题(怀疑这是偶尔发生的)? 【参考方案1】:

问题是您将所有者设置为 root:root 并且 apache 用户是 ec2-user。

当您删除现有日志时,正确的用户将创建新日志并根据需要运行。您还可以将文件 chown 给 ec2-user,这也可以。

【讨论】:

这个脚本不会只是更改权限吗?我认为所有者和组是它正在生成的 shell 脚本文件。我在这里错过了什么吗?虽然我在命令中添加了 sudo 并且不再看到错误。虽然这些错误是随机出现的,但会为每个好奇的人保持最新的线程。

以上是关于Elastic Beanstalk 上的“laravel.log 无法打开”错误的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件

Elastic Beanstalk 上的 SSL

如何避免 AWS Elastic Beanstalk 上的 TooManyApplicationVersion 异常?

如何避免 AWS Elastic Beanstalk 上的 TooManyApplicationVersion 异常?

无法连接到 Elastic Beanstalk 上的 ActionCable

AWS Elastic Beanstalk 上的 Wordpress