【问题标题】:laravel 4 queue(SQS and Elasticbeanstalk) failed to open stream:Permission deniedlaravel 4 队列(SQS 和 Elasticbeanstalk)无法打开流:权限被拒绝
【发布时间】:2015-09-10 02:30:25
【问题描述】:

我的队列任务如下所示

$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

logs目录自己改成775,我测试了non-queue方式写入,可以写入成功。

文件权限

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

为什么会这样?

【问题讨论】:

    标签: php laravel amazon-elastic-beanstalk amazon-sqs


    【解决方案1】:

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

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

    【讨论】:

    • 我重写代码,再次测试,排除queue runner不在script owner的组中的可能性。(在topic中更新)。是配置queue runner的地方吗?因为在 laravel 4 中,只有一个 queue.php 可用于配置队列。谢谢您的帮助。
    【解决方案2】:

    有两种情况会导致laravel 4 queue failed to open stream异常,

    1.权限问题,queue runner没有文件/目录的读写权限,请修改文件权限为775。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 2020-05-31
      • 2019-05-02
      • 2018-06-27
      • 2018-10-20
      • 1970-01-01
      相关资源
      最近更新 更多