Подтвердить что ты не робот

Перед ошибкой разрешения файла при запуске CakePHP в Ubuntu 10.4

Я установил фреймворк CakePHP 2.0, используя следующие шаги:

1. Start the terminal
2. sudo mkdir /var/www/cakephp
3.sudo cp -r ~/cakephp/* /var/www/cakephp

Изменение разрешения папки tmp

4. sudo chmod -R 777 cakephp/app/tmp

Включить mod-rewrite

5. sudo a2enmod rewrite

Откройте файл /etc/apache 2/sites-enabled/000-default и измените AllowOverride None на AllowOverride All

6. sudo vim /etc/apache2/sites-enabled/000-default

Перезапустить Apache

7. sudo /etc/init.d/apache2 restart

Я открыл свой браузер и набрал адрес http://localhost/cakephp/, и я увидел это сообщение об ошибке:

Предупреждение: кэш _cake_core_ не смог записать 'cake_dev_en-us' в Файловый кеш в /var/www     /cakephp/lib/Cake/Cache/Cache.php в строке 310
Предупреждение: кэш _cake_core_ не смог     напишите 'cake_dev_en-us' в Файловый кеш в /var/www/cakephp/lib/Cake/Cache/Cache.php в строке 310
Предупреждение:/var/www/cakephp/app/tmp/cache/persistent/не записывается в /var/www/cakephp     /lib/Cake/Cache/Engine/FileEngine.php on line 320
Предупреждение:/var/www/cakephp/app/tmp/cache     /models/ не записывается в /var/www/cakephp/lib/Cake/Cache/Engine/FileEngine.php в строке 320
Предупреждение:/var/www/cakephp/app/tmp/cache/не записывается в /var/www/cakephp/lib/Cake     /Cache/Engine/FileEngine.php в строке 320

4b9b3361

Ответ 1

Команда sudo chmod -R 777 cakephp/app/tmp только сделала запись tmp доступной для записи, вы должны сделать запись в кеш и ее поддиректории, иначе Cake не сможет записать файлы кеша в каталог кэша в tmp.

Итак, эти каталоги должны быть доступны для записи:

cakephp/app/tmp/cache
cakephp/app/tmp/cache/persistent
cakephp/app/tmp/cache/models

Убедитесь, что каталог журнала также доступен для записи: cakephp/app/tmp/logs.

Ответ 2

У меня возникли аналогичные проблемы. Вот несколько вещей, которые помогли мне:

Если вы не хотите использовать подход "кувалда" chmod 777 (вы можете избегать его при производстве, для экземпляр), инструкции по установке CakePHP содержат информацию о том, как использовать ACL:

Обратите внимание, что вам, вероятно, потребуется использовать sudo для команд setfacl, указанных там.

Однако, по моему опыту (CakePHP 2), этих команд недостаточно. Эти команды дают пользователю вашего веб-сервера доступ к кешу и т.д., Но все, что вы запускаете из командной строки (например, команда cake), вероятно, будет работать как ваш пользователь, а не пользователь веб-сервера.

Следовательно, вы должны запустить команды setfacl, связанные выше, во второй раз, заменив ${HTTPDUSER} на ваше имя пользователя. Если вы не знаете, что такое ваше имя пользователя, введите whoami, чтобы найти его.

Ответ 3

Я столкнулся с очень похожей проблемой с cachePhp 3.

Warning (512): /cache/persistent/ is not writable [CORE/src/Cache/Engine/FileEngine.php, line 439]

Warning (512): Cache engine Cake\Cache\Engine\FileEngine is not properly configured. [CORE/src/Cache/Cache.php, line 177]

Поскольку я новичок в CakePhp, я отлаживал файл с проблемой - CORE/src/Cache/Engine/FileEngine.php. Вот как функция следующая:

protected function _active()
{
    $dir = new SplFileInfo($this->_config['path']);
    $path = $dir->getPathname();

    $success = true;
    if (!is_dir($path)) {        
        //@codingStandardsIgnoreStart
        $success = @mkdir($path, 0775, true);
        //@codingStandardsIgnoreEnd
    }

    $isWritableDir = ($dir->isDir() && $dir->isWritable());

    if (!$success || ($this->_init && !$isWritableDir)) {
        $this->_init = false;
        trigger_error(sprintf(
            '%s is not writable',
            $this->_config['path']
        ), E_USER_WARNING);
    }

    return $success;
}

Он проверяет, является ли каталог кэша доступным для записи и получает данные о переменной пути $this->_config['path']. Эта переменная инициализируется по умолчанию из файла .env(если вы ее используете), и она имеет следующие строки:

export CACHE_DEFAULT_URL="File://tmp/cache/?prefix=${APP_NAME}_default&duration=${CACHE_DURATION}"
export CACHE_CAKECORE_URL="File://tmp/cache/persistent?prefix=${APP_NAME}_cake_core&serialize=true&duration=${CACHE_DURATION}"
export CACHE_CAKEMODEL_URL="File://tmp/cache/models?prefix=${APP_NAME}_cake_model&serialize=true&duration=${CACHE_DURATION}"

Я изменил все File: на Null:, например следующее:

export CACHE_DEFAULT_URL="Null://tmp/cache/?prefix=${APP_NAME}_default&duration=${CACHE_DURATION}"
export CACHE_CAKECORE_URL="Null://tmp/cache/persistent?prefix=${APP_NAME}_cake_core&serialize=true&duration=${CACHE_DURATION}"
export CACHE_CAKEMODEL_URL="Null://tmp/cache/models?prefix=${APP_NAME}_cake_model&serialize=true&duration=${CACHE_DURATION}"
export CACHE_DRV_DEFLT = "Null"
export CACHE_DRV_MODEL = "Null"
export CACHE_DRV_CORE = "Null"

И это помогает, моя проблема была исправлена. Вероятно, это будет полезно для кого-то. Наслаждайтесь!

Ответ 4

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

export CACHE_FOLDER="/var/www/absolute_path_to_my_cakephp_app/"
export CACHE_DURATION="+2 minutes"
export CACHE_DEFAULT_URL="file://${CACHE_FOLDER}tmp/cache/?prefix=${APP_NAME}_default&duration=${CACHE_DURATION}"
export CACHE_CAKECORE_URL="file://${CACHE_FOLDER}tmp/cache/persistent?prefix=${APP_NAME}_cake_core&serialize=true&duration=${CACHE_DURATION}"
export CACHE_CAKEMODEL_URL="file://${CACHE_FOLDER}tmp/cache/models?prefix=${APP_NAME}_cake_model&serialize=true&duration=${CACHE_DURATION}"