cakephp ubuntu-10.04

Frente a un error de permiso de archivo al ejecutar CakePHP en Ubuntu 10.4



ubuntu-10.04 (4)

He instalado la estructura de CakePHP 2.0 siguiendo los pasos a continuación:

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

Cambiar el permiso de la carpeta tmp

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

Habilitar mod-rewrite

5. sudo a2enmod rewrite

Abra el archivo / etc / apache2 / sites-enabled / 000-default y cambie AllowOverride None para AllowOverride All

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

Reiniciar Apache

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

Abrí mi navegador y escribí la dirección http: // localhost / cakephp / y escribí este mensaje de error:

Advertencia: _cake_core_ cache no pudo escribir ''cake_dev_en-us'' en Caché de archivos en / var / www / cakephp/lib/Cake/Cache/Cache.php en la línea 310
Advertencia: _cake_core_ cache no pudo escribir ''cake_dev_en-us'' en Caché de archivos en /var/www/cakephp/lib/Cake/Cache/Cache.php en la línea 310
Advertencia: / var / www / cakephp / app / tmp / cache / persistent / no se puede escribir en / var / www / cakephp /lib/Cake/Cache/Engine/FileEngine.php en la línea 320
Advertencia: / var / www / cakephp / app / tmp / cache / models / no se puede escribir en /var/www/cakephp/lib/Cake/Cache/Engine/FileEngine.php en la línea 320
Advertencia: / var / www / cakephp / app / tmp / cache / no se puede escribir en / var / www / cakephp / lib / Cake /Cache/Engine/FileEngine.php en la línea 320


El comando sudo chmod -R 777 cakephp/app/tmp solo hace que tmp pueda escribir, debe hacer que la caché y sus subdirectorios también sean escribibles, de lo contrario, Cake no puede escribir los archivos de caché en el directorio de caché en tmp.

Entonces, estos directorios deberían poder escribirse:

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

Asegúrese de que el directorio de registro también se pueda escribir: cakephp/app/tmp/logs .


He enfrentado problemas similares. Aquí hay un par de cosas que me ayudaron:

Si no desea utilizar el enfoque "martillo" de chmod 777 (es posible que desee evitarlo en la producción , por ejemplo), las instrucciones de instalación de CakePHP proporcionan detalles sobre cómo usar ACL en su lugar:

Tenga en cuenta que probablemente necesite usar sudo para los comandos setfacl dados allí.

Sin embargo, en mi experiencia (CakePHP 2), esos comandos no son suficientes. Estos comandos dan acceso a su servidor web al caché, etc., pero cualquier cosa que ejecute desde la línea de comandos (como el comando cake ) probablemente se ejecutará como usuario en lugar de usuario del servidor web.

Por lo tanto, debe ejecutar los comandos setfacl vinculados a arriba una segunda vez, reemplazando ${HTTPDUSER} con su nombre de usuario. Si no está seguro de cuál es su nombre de usuario, escriba whoami para encontrarlo.


He encontrado un problema muy similar con 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]

Como soy nuevo en CakePhp, he depurado el archivo con el problema - CORE / src / Cache / Engine / FileEngine.php . Aquí está la función como siguiente:

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; }

Comprueba si el directorio de caché es escribible y obtiene datos sobre la forma del camino $this->_config[''path''] variable. Esta variable se inicializa por defecto desde el archivo .env (si lo usa), y tiene líneas como la siguiente:

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}"

He cambiado todo File: to Null: como el siguiente:

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"

Y ayuda, mi problema fue reparado. Probablemente será útil para alguien. ¡Disfrutar!


Como solución temporal, si desea utilizar el archivo .env proporcionado y los permisos no resuelven su problema, modifique el archivo .env para usar una ruta absoluta que apunte a su directorio de aplicaciones.

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}"