laravel 4 队列(SQS 和 Elasticbeanstalk)无法打开 stream:Permission 被拒绝

laravel 4 queue(SQS and Elasticbeanstalk) failed to open stream:Permission denied

我的队列任务如下

$message = "message";
Queue::push(function($job) use ($message)
{
    echo "user of queue runnur : ".get_current_user();
    Log::info($data,$message.get_current_user());
    $job->delete();
});

然而,我得到了

user of queue runnur : webapp
The stream or file "/var/app/current/app/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied

日志目录被myself.And修改为775 我测试了非队列方式写入,可以写入成功

文件权限

-rwxrwxrwx 1 webapp webapp 1269117 Jun 24 07:59 laravel.log

为什么会这样?

您的队列运行器 运行 在与网站或网络服务器不同的用户上。 laravel.log 文件由网络服务器或 php 进程创建。队列处理程序 运行 作为不同的用户,并尝试写入日志文件,如您的 Log::info() 调用所示。但是,此用户无权访问其他用户创建的文件。

你的队列运行器是如何配置的?

有两种情况会导致laravel 4队列无法打开流异常,

1.Permission问题,queue runner没有file/directory读取权限或write.Plz更改文件权限为775.

2.Wrong path.The 脚本的当前目录 运行 在网站入口点(index.php)和队列运行器之间完全不同。

为了调试,请推送此作业并运行查看相关信息

    Queue::push(function($job) use ($message)
   {
        echo "user = ".get_current_user();
        echo "current directory = " . getcwd();
        $job->delete();
    });

在我的情况下,它是由情况2引起的,网站的当前目录是/rootOfProject/public,队列运行器是/rootOfProject