【问题标题】:How to prevent laravel changing folder owner如何防止 laravel 更改文件夹所有者
【发布时间】:2021-11-01 01:44:31
【问题描述】:

我们有时会在 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 项目中触发生产错误通知以收到有关此类问题的警告?

【问题讨论】:

    标签: laravel apache filesystems chown


    【解决方案1】:

    要永久解决此问题,您必须在代码中授予正确的权限,因此请转到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 上测试

    【讨论】:

    • 感谢您的回答。我应用了你的更改。现在突然这个错误又回来了。这是文件夹storage/logs/framework 导致问题。所以我会将'permission' => 0775 添加到文件config/cache.php 中的文件存储中。希望它不会以这种方式返回......
    【解决方案2】:

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

    1. sentry
    2. flare
    3. busnag

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

    【讨论】:

      猜你喜欢
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      相关资源
      最近更新 更多