Ocasional error warning when CakePHP is writing to the cache

前端 未结 4 1305
野的像风
野的像风 2021-01-05 12:42

I\'m developing a CakePHP 2.2 site locally with MAMP. Every so often, I get one or more warnings similar to this, about not being able to write to one or more cache files:

相关标签:
4条回答
  • 2021-01-05 13:02

    This happens probably when a process different from Apache create files in the cache. This can be the case for instance when you run shell commands as you probably do it as a different user than apache.

    By default the File cache creates files with permissions allowing only the user that has created the files to modify them, but this can be fixed by setting a mask in the Cache config in core.php:

    Cache::config('_cake_core_', array(
        'engine' => $engine,
        'prefix' => 'cake_core_',
        'path' => CACHE . 'persistent' . DS,
        'serialize' => ($engine === 'File'),
        'duration' => $duration,
        'mask' => 0666
    ));
    
    Cache::config('_cake_model_', array(
        'engine' => $engine,
        'prefix' => 'cake_model_',
        'path' => CACHE . 'models' . DS,
        'serialize' => ($engine === 'File'),
        'duration' => $duration,
        'mask' => 0666
    ));
    
    0 讨论(0)
  • 2021-01-05 13:06

    Just in case anybody is seeing this and wonders how it works in cakePHP 3.x:

    modify /config/app.php and add 'mask' => 0666 to

    /**
     * Configure the cache adapters.
     */
    'Cache' => [
        'default' => [
            'className' => 'File',
            'path' => CACHE,
            'url' => env('CACHE_DEFAULT_URL', null),
            'mask' => 0666
        ],
    

    and probably you also want to add it to the log files:

    /**
     * Configures logging options
     */
    'Log' => [
        'debug' => [
            'className' => 'Cake\Log\Engine\FileLog',
            'path' => LOGS,
            'file' => 'debug',
            'levels' => ['notice', 'info', 'debug'],
            'url' => env('LOG_DEBUG_URL', null),
            'mask' => 0666
        ],
        'error' => [
            'className' => 'Cake\Log\Engine\FileLog',
            'path' => LOGS,
            'file' => 'error',
            'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
            'url' => env('LOG_ERROR_URL', null),
            'mask' => 0666
        ],
    ],
    
    0 讨论(0)
  • 2021-01-05 13:07

    Simple really, assuming and you are a sudoer and your user name is martinlutherking

    sudo adduser martinlutherking www-data
    

    This way cake console commands can read cache files created by apache2, however you may need to do the inverse group add to ensure that www-data can read cache files created by martinlutherking

    0 讨论(0)
  • 2021-01-05 13:16

    If you want to avoid giving read/write access to the "other" group, check out my other solution here:

    https://stackoverflow.com/a/18703956/385979

    0 讨论(0)
提交回复
热议问题