Laravel:Mail类使用错误的所有权缓存视图,从而导致“权限被拒绝”错误

时间:2019-04-27 19:11:03

标签: php laravel nginx

TL; DR

Mailable缓存具有错误组(权限)的文件,这在发送电子邮件时导致“权限被拒绝”错误。我该如何预防?

详细信息

我的Laravel应用发送Mailable类的电子邮件。

我注意到,每次发送电子邮件时,电子邮件的查看文件都会缓存在storage/framework/views中。

问题是缓存文件的所有权不正确。当我运行ls -al storage/framework/views时,我可以看到每个文件看起来都像...

-rw-rw-r--  1 user user   192 Apr 27 09:46 4251.....php

此应用正在Nginx上运行,并且storage(和bootstrap)中的所有文件都有其所有者user和组nginx

drwxrwxr-x.   5 user nginx   46 Feb 23 02:50 storage

如果有一个文件组不是nginx,将出现"Permission denied"错误。

因此,每个缓存文件的所有权应类似于...

-rw-rw-r--  1 user nginx   192 Apr 27 09:46 4251.....php

(如果我使用chown $USER:nginx -R storage/更改了缓存视图的所有权,则不会导致“权限被拒绝”错误)

对于Mailable为何使用错误的组来缓存文件,我真的一无所知。

有什么办法可以修复它,还是应该停止Mailable以某种方式缓存文件?

任何建议将不胜感激。

PS

操作系统为CentOS 7,与Ubuntu(和其他Linux发行版)不同,它不使用www-data用户/组

更新

此应用发送一封带有Job的电子邮件。

这是一个调度作业的控制器。

class PaymentController extends Controller
{     
    //traits, __construct, etc

    public function store()
    {
        //other lines here...
        SendOrderConfirmationEmail::dispatch($order);
    }
}

这是工作handle()的样子。

class SendOrderConfirmationEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    //__construct

    public function handle()
    {
        Mail::to($this->order->email)
            ->send(new OrderConfirmationEmail($this->order));
    }
}

0 个答案:

没有答案