如何防止laravel更改文件夹所有者



在Laravel项目中,我们经常会遇到破坏性的问题:

存储日志文件

production.ERROR: Unable to create lockable file: /var/www/html/storage/framework/cache/data/... Please ensure you have permission to creto create files in this location.
#0 /var/www/html/vendor/laravel/framework/src/Illuminate/Filesystem/LockableFile.php(43)

当问题发生时,ls -l给出

drwxrwsr-x+   2 apache   apache     4096 Sep  2 14:36 logs

为了解决这个问题,我们运行sudo chown -R ec2-user:apache logs/,它给出

drwxrwsr-x+   2 ec2-user   apache     4096 Sep  2 14:36 logs

但这是一个手动修复…

因此,我想问:

A)如何防止文件系统突然改变所有者哪一个破坏了编码?

B)或者如何在Laravel项目中触发生产错误通知以警告此类问题?

回答第二个查询,您可以使用它们中的任何一个进行错误报告:

  1. 哨兵
  2. 耀斑
  3. busnag

所有异常都由App exceptions Handler处理在这个类中,有一个方法名为register您可以在那里配置上述任何工具,以便在那里报告异常。否则,您可以构建您的自定义报告方法,如发送电子邮件给您发送异常消息或发送slack通知。

要永久解决此问题,您必须在代码中给予正确的许可,因此转到config/logging.php,您将发现如下内容:

'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
],
...
],

'permission' => 0775,添加到使用的通道中,因此它将如下所示(我已将其添加到singledaily通道中):

'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'permission' => 0775,
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
'permission' => 0775,
],
...
],

这个修复在Laravel 6上测试

最新更新