Laravel пытается хранить файлы кэша в корневой папке

Я получаю следующую ошибку от Laravel5 при рендеринге любой страницы:

ErrorException in Filesystem.php line 74: 
file_put_contents(/fdcc73e2e72031a510ae8f921ce1d22d): failed to open stream: Permission denied

моя конфигурация кэша выглядит следующим образом:

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Cache Store
    |--------------------------------------------------------------------------
    |
    | This option controls the default cache connection that gets used while
    | using this caching library. This connection is used when another is
    | not explicitly specified when executing a given caching function.
    |
    */

    'default' => env('CACHE_DRIVER', 'file'),

    /*
    |--------------------------------------------------------------------------
    | Cache Stores
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the cache "stores" for your application as
    | well as their drivers. You may even define multiple stores for the
    | same cache driver to group types of items stored in your caches.
    |
    */

    'stores' => [

        'apc' => [
            'driver' => 'apc'
        ],

        'array' => [
            'driver' => 'array'
        ],

        'database' => [
            'driver' => 'database',
            'table'  => 'cache',
            'connection' => null,
        ],

        'file' => [
            'driver' => 'file',
            'path'   => storage_path().'/framework/cache',
        ],

        'memcached' => [
            'driver'  => 'memcached',
            'servers' => [
                [
                    'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100
                ],
            ],
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Cache Key Prefix
    |--------------------------------------------------------------------------
    |
    | When utilizing a RAM based store such as APC or Memcached, there might
    | be other applications utilizing the same cache. So, we'll specify a
    | value to get prefixed to all our keys so we can avoid collisions.
    |
    */

    'prefix' => 'laravel',

];

Интересно, если я изменил значение по умолчанию на массив или любые другие параметры, он все равно пытается записать файл кэша в корневую папку и терпеть неудачу каждый раз.

Кто-нибудь еще сталкивался с этим?

Ответ 1

Посмотрите, существует ли 'storage/framework/views'. Если вы добавите его, и у вас все еще есть проблемы. Убедитесь, что он доступен для записи (775, 77 и т.д.)

В моем случае ошибка произошла из-за того, что я был развернут на моем рабочем сервере через github, но содержимое хранилища не отслеживалось git. Я исправил это, убедившись, что файлы .gitignore в каждой из директорий внутри/хранилища были привязаны к репо.

Примечания: Обычно эти странные имена файлов имеют какое-то отношение к шаблонам Blade. Я не думаю, что на самом деле пытается сохранить файл кеша в корне.

Моя ошибка была схожа: "ErrorException в строке Filesystem.php 81: file_put_contents (/f946048111f1176619e22f5127724e37): не удалось открыть поток: разрешение отклонено"

Ответ 2

Я использую debian 7 wheezy.

Если вы получаете такие ошибки, выполните следующие действия.

Перейдите в папку приложения (например:/home/app/web)

  • php artisan config: cache
  • php artisan cache: clear
  • php artisan view: clear
  • chmod -R 777 storage/or chown -R webuser: хранилище webuser/
  • chmod -R 777 public/or chown -R webuser: webuser public/
  • сервис apache2 перезагрузка, перезапуск службы apache2

Примечание. Здесь Webuser относится к www-данным или настраиваемому пользователю.

Пожалуйста, убедитесь, что база данных связана со страницей.

Ответ 3

Где вы загружаете CACHE_DRIVER из?

Линия

'default' => env('CACHE_DRIVER', 'file'),

ищет либо переменные системной среды, либо файл .env, расположенный в корне вашего проекта. На том, что вы описали, я предполагаю, что вы только пытаетесь изменить метод кеша в файле конфигурации кеша. Второй параметр метода - это значение по умолчанию, если laravel не находит CACHE_DRIVER в другом месте.

Вы должны проверить файл .env в корне проекта для переменной CACHE_DRIVER. Если он есть, значение будет иметь приоритет над конфигурацией в cache.php.


Другим решением было бы убедиться, что у laravel есть разрешение на запись в указанном каталоге. Посмотрите, имеет ли папка разрешение на запись либо для пользователя или группы www-data (по крайней мере).