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));
}
}