symfony2 : failed to write cache directory

Symfony

Symfony Problem Overview


I have had to use the

app/console cache:clear  command

to solve a problem when generating an entity.

I am now unable to load my homepage on :

  http://localhost/projet_etienne/web/app_dev.php

it says : >RuntimeException: Failed to write cache file "/var/www/projet_etienne/app/cache/dev/classes.php".

I don't understand much about this cache business!

In my app/cache folder, I got a dev, a dev_new, a dev_old folder. Is that normal?

the

app/console cache:clear

generates by the way a : >[ErrorException] Warning: rename(/var/www/projet_etienne/app/cache/dev,/var/www/projet_etien
ne/app/cache/dev_old): Directory not empty in /var/www/projet_etienne/vendo
r/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearComm
and.php line 77

please help!

Symfony Solutions


Solution 1 - Symfony

For a GOOD and definite solution see the Setting up Permissions section in Installing and Configuring Symfony section :

> Setting up Permissions > > One common issue when installing Symfony is that the app/cache and > app/logs directories must be writable both by the web server and the > command line user. On a UNIX system, if your web server user is > different from your command line user, you can try one of the > following solutions. > > 1. Use the same user for the CLI and the web server > > In development environments, it is a common practice to use the same > UNIX user for the CLI and the web server because it avoids any of > these permissions issues when setting up new projects. This can be > done by editing your web server configuration (e.g. commonly > httpd.conf or apache2.conf for Apache) and setting its user to be the > same as your CLI user (e.g. for Apache, update the User and Group > values). > > 2. Using ACL on a system that supports chmod +a > > Many systems allow you to use the chmod +a command. Try this first, > and if you get an error - try the next method. This uses a command to > try to determine your web server user and set it as HTTPDUSER: > > > $ rm -rf app/cache/* > $ rm -rf app/logs/* > > $ HTTPDUSER=ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1 > $ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs > $ sudo chmod +a "whoami allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs > > 3. Using ACL on a system that does not support chmod +a > > Some systems don't support chmod +a, but do support another utility > called setfacl. You may need to enable ACL support on your partition > and install setfacl before using it (as is the case with Ubuntu). This > uses a command to try to determine your web server user and set it as > HTTPDUSER: > > > > $ HTTPDUSER=ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1 > $ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:whoami:rwX app/cache app/logs > $ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:whoami:rwX app/cache app/logs > > For Symfony 3 it would be: > > $ HTTPDUSER=ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1 > $ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:whoami:rwX var/cache var/logs > $ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:whoami:rwX var/cache var/logs > > > If this > doesn't work, try adding -n option. > > 4. Without using ACL > > If none of the previous methods work for you, change the umask so that > the cache and log directories will be group-writable or world-writable > (depending if the web server user and the command line user are in the > same group or not). To achieve this, put the following line at the > beginning of the app/console, web/app.php and web/app_dev.php files: > > > > umask(0002); // This will let the permissions be 0775 >
> // or >
> umask(0000); // This will let the permissions be 0777 > >Note that using the ACL is recommended when you have access to them on your server > because changing the umask is not thread-safe.

http://symfony.com/doc/current/book/installation.html#checking-symfony-application-configuration-and-setup

source : https://stackoverflow.com/questions/8449345/symfony-2-cacheclear-bug

Solution 2 - Symfony

Most likely it means that the directory and/or sub-directories are not writable. Many forget about sub-directories.

Symfony 2

chmod -R 777 app/cache app/logs

Symfony 3 directory structure

chmod -R 777 var/cache var/logs

Additional Resources

Permissions solution by Symfony (mentioned previously).

Permissions solution by KPN University - additionally includes an screen-cast on installation.

Note: If you're using Symfony 3 directory structure, substitute app/cache and app/logs with var/cache and var/logs.

Solution 3 - Symfony

If the folder is already writable so thats not the problem.

You can also just navigate to /www/projet_etienne/app/cache/ and manualy remove the folders in there (dev, dev_new, dev_old).

Make sure to SAVE a copy of those folder somewhere to put back if this doesn't fix the problem

I know this is not the way it should be done but it worked for me a couple of times now.

Solution 4 - Symfony

You probably aborted a clearcache halfway and now you already have an app/cache/dev_old.

Try this (in the root of your project, assuming you're on a Unixy environment like OS X or Linux):

rm -rf app/cache/dev*

Solution 5 - Symfony

Maybe you forgot to change the permissions of app/cache app/log

I'm using Ubuntu so

sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs
sudo setfacl -dR -m u::rwX app/cache app/logs

Hope it helps..

Solution 6 - Symfony

I move the whole directory from my Windows installation to a unix production server and I got the same error. To fix it, I just ran these two lines in unix and everything started to run fine

rm -rf app/cache/*
rm -rf app/logs/*

Solution 7 - Symfony

i executed:

ps aux | grep apache

and got something like that:

root     28147  0.0  5.4 326336 27024 ?        Ss   20:06   0:00 /usr/sbin/apache2 -k start
www-data 28150  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28151  0.0  4.4 329016 22124 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28152  0.1  6.0 331252 30092 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28153  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28154  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28157  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
user     28297  0.0  0.1  15736   924 pts/4    S+   20:12   0:00 grep --color=auto apache

so my user with no access turned out to be www-data thus i executed commands:

sudo chown -R www-data app/cache
sudo chown -R www-data app/logs

and it solved access errors.

> Never-ever use unsecure 777 for solving specific access probles:

sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs

Solution 8 - Symfony

if symfony version less than 2.8

sudo chmod -R 777 app/cache/*

if symfony version great than or equal 3.0

sudo chmod -R 777 var/cache/*

Solution 9 - Symfony

Just use this acl cmd, next time the files inside var are created it will have the r/w/x permission for www-data user.

cd var 
rm -rf *
cd ..
setfacl -d -m u:www-data:rwx var

Cmd explanation:

setfacl -> Set acl command    
-d -> default behavior    
-m -> modify 
u:www-data: -> for user 
rwx -> adding permissions  
var -> on the folder

Solution 10 - Symfony

If you face this error when you start Symfony project with docker (my Symfony version 5.1). Or errors like these:

> Uncaught Exception: Failed to write file "/var/www/html/mysite.com.local/var/cache/dev/App_KernelDevDebugContainer.xml"" while reading upstream

> Uncaught Warning: file_put_contents(/var/www/html/mysite.com.local/var/cache/dev/App_KernelDevDebugContainerDeprecations.log): failed to open stream: Permission denied" while reading upstream

Fix below helped me.

In Dockerfile for nginx container add line:

RUN usermod -u 1000 www-data

In Dockerfile for php-fpm container add line:

RUN usermod -u 1000 www-data

Then remove everything in directories "/var/cache", "/var/log" and rebuild docker's containers.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMatoeilView Question on Stackoverflow
Solution 1 - SymfonyzizoujabView Answer on Stackoverflow
Solution 2 - SymfonyTimofey DrozhzhinView Answer on Stackoverflow
Solution 3 - SymfonyMats RietdijkView Answer on Stackoverflow
Solution 4 - SymfonyBoy BaukemaView Answer on Stackoverflow
Solution 5 - Symfonyuser2338925View Answer on Stackoverflow
Solution 6 - SymfonyRodolfo VelascoView Answer on Stackoverflow
Solution 7 - SymfonyStan FadView Answer on Stackoverflow
Solution 8 - SymfonyrapaelecView Answer on Stackoverflow
Solution 9 - SymfonyLevy MoreiraView Answer on Stackoverflow
Solution 10 - SymfonysNICkerssssView Answer on Stackoverflow