gpt4 book ai didi

laravel - 将 Laravel 部署到 Elastic Beanstalk : "failed to open stream: Permission denied"

转载 作者:行者123 更新时间:2023-12-04 17:24:10 26 4
gpt4 key购买 nike

有时,当我将 Laravel 项目部署到 AWS Elastic Beanstalk 时,我会遇到一个恼人的错误,提示无法打开日志文件:

The stream or file "/var/app/current/storage/logs/laravel-2020-10-21.log" could not be opened: failed to open stream: Permission denied

在我的 eb deploy.config 文件中,我有一个声明,理论上应该修复问题,但没有:

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

if [ ! -f /var/app/current/storage/logs/laravel.log ]; then
echo "Creating /storage/logs/laravel.log..."
touch /var/app/current/storage/logs/laravel.log
chown webapp:webapp /var/app/current/storage/logs/laravel.log
fi

这是因为它没有引用每日日志文件。

我有一个 .ebignore 文件,它明确阻止部署本地日志,所以不是现有日志文件的存在导致了问题:

/storage/logs/*

问题是 Laravel 以 root 创建每日日志,因此普通用户 (webapp) 无法写入。

我只是不知道它为什么要这样做?

最佳答案

解决方案是允许每个进程创建自己的日志文件。这样每个进程都将拥有正确的写入权限。

您可以在 config/logging.php 文件中执行此操作,并将进程名称 (php_sapi_name()) 添加到文件名中:

    'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/' . php_sapi_name() . '-laravel.log'),
'level' => 'debug',
'days' => 14,
],

现在每个进程都可以写入自己的文件,不会有权限问题。

重要说明:上面的示例使用“每日”,但请确保为您更改正确的日志记录 channel 。

关于laravel - 将 Laravel 部署到 Elastic Beanstalk : "failed to open stream: Permission denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64472033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com