2013-04-04 119 views
11

當我嘗試清除緩存時,我的Symfony 2網站最近給我帶來了問題。 我在終端上鍵入以下命令:Symfony 2緩存清除問題

php app/console cache:clear --env=dev 

並得到以下錯誤:

[ErrorException]                                                         
Warning: rename(/var/www/corpsite/corpsite/app/cache/dev,/var/www/corpsite/corpsite/app/cache/dev_old): Directory not empty in /var/www/corpsite/corpsite/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php line 74 

所以我改變該文件的權限爲777,並重新運行清除緩存指令,這給了我這個錯誤:

[ErrorException]                                                       
    Warning: unlink(/var/www/corpsite/corpsite/app/cache/dev_old/twig/6b/e9/4491e41b895786689b86f32f446f.php): Permission denied in /var/www/corpsite/corpsite/vendor/symfony/src/Symfony/Component/HttpKernel/Util/Filesystem.php line 100 

我可以避開通過刪除「dev_old」文件夾中的問題,但我想,以解決造成問題的問題。

P.S - 我知道該網站正在開發模式下運行。該網站已經生活了10個月,這從來都不是一個問題。

任何幫助表示讚賞!

+0

直接刪除dev_old文件夾,然後運行該命令再次。 – Squazic 2013-04-04 15:23:49

+0

「我可以通過刪除'dev_old'文件夾來解決問題,但我想解決導致問題的問題。」 – qooplmao 2013-04-04 15:25:10

+0

並用'root'運行命令? (或'sudo') – cheesemacfly 2013-04-04 15:36:44

回答

31

您需要獲得對緩存&日誌文件夾的訪問權限。要做到這一點,你可以按照這裏給出的指示:http://symfony.com/doc/current/book/installation.html#configuration-and-setup

有幾種方法,根據您的操作系統(與你的apache用戶更換WWW的數據):

如果它支持使用chmod +一個:

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

$ sudo chmod +a "www-data 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 

否則,如果它支持setfacl的(見https://help.ubuntu.com/community/FilePermissionsACLs):

$ sudo setfacl -R -m u:www-data:rwX -m u:`whoami`:rwX app/cache app/logs 
$ sudo setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs 

否則,把這些線在app /控制檯的開始,網絡/ app.php &網/ app_dev.php(不推薦):

umask(0002); // This will let the permissions be 0775 

// or 

umask(0000); // This will let the permissions be 0777 
+1

謝謝你。刪除app/cache/dev_old文件夾後,我使用了第二組命令(setfacl),它已經工作。 – richelliot 2013-04-09 11:20:35

+0

@ hugo-briand,請擴展爲什麼不推薦umask(0002)?安全問題? – 2014-10-29 11:37:05

+0

從symfony安裝中給出的指示來看,這種方法不是線程安全的。這意味着如果您可以並行訪問腳本(例如通過fpm或查詢+ CLI),則可能會遇到問題。從PHP umask doc(http://php.net/manual/en/function.umask.php):避免在多線程的Web服務器中使用這個函數。創建文件後,最好使用chmod()更改文件權限。使用umask()會導致意外的併發運行腳本和Web服務器本身的行爲,因爲它們都使用相同的umask。 – 2014-10-30 09:38:10

-4

您需要獲得兩個緩存&日誌文件夾的訪問權限。要做到這一點,你可以按照這裏給出的指示:

+1

鑑於在哪裏?:)在發佈該鏈接之前:最好發佈鏈接*和*在答案本身中包含相關內容,因爲鏈接可能會失效。 – 2016-05-15 22:47:32

2

Symfony3文件夾與緩存從app搬到var,因此命令將是:

$ rm -rf var/cache/* 
$ rm -rf var/logs/* 
$ sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" var/cache var/logs 
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" var/cache var/logs 
+0

我在幾年前停止使用Symfony 2,不要錯過它一點。它使得簡單的事情變得困難並且簡單的事情變得容易每個項目都很頭痛。 Symfony3是什麼樣的? – richelliot 2017-06-29 13:06:44