在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项目中触发生产错误通知以警告此类问题?
回答第二个查询,您可以使用它们中的任何一个进行错误报告:
- 哨兵
- 耀斑
- 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,
添加到使用的通道中,因此它将如下所示(我已将其添加到single
和daily
通道中):
'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上测试