當我我的Symfony2項目cap deploy
,然後登錄到我的服務器我看到開發(app_dev.php)運行正常,但prod版本(app.php)沒有。資本和目錄所有者
的錯誤是
[Tue Jan 03 14:31:48 2012] [error] [client xxx.xxx.xxx.xxx] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Failed to write cache file "/var/www/example/prod/releases/20120103202539/app/cache/prod/classes.php".' in /var/www/example/prod/releases/20120103202539/app/bootstrap.php.cache:1079\nStack trace:\n#0 /var/www/example/prod/releases/20120103202539/app/bootstrap.php.cache(1017): Symfony\\Component\\ClassLoader\\ClassCollectionLoader::writeCacheFile('/var/www/example/p...', '<?php ????name...')\n#1 /var/www/example/prod/releases/20120103202539/app/bootstrap.php.cache(682): Symfony\\Component\\ClassLoader\\ClassCollectionLoader::load(Array, '/var/www/example/p...', 'classes', false, false, '.php')\n#2 /var/www/example/prod/releases/20120103202539/web/app.php(10): Symfony\\Component\\HttpKernel\\Kernel->loadClassCache()\n#3 {main}\n thrown in /var/www/example/prod/releases/20120103202539/app/bootstrap.php.cache on line 1079
在最近部署的緩存目錄中查找我看到:
drwxrwxrwx 4 root root 4096 Jan 3 14:28 .
drwxrwxr-x 5 root root 4096 Jan 3 14:28 ..
drwxr-xr-x 6 www-data www-data 4096 Jan 3 14:28 dev
drwxrwxr-x 7 root root 4096 Jan 3 14:28 prod
我可以解決這個問題有chown -R www-data.www-data prod/
,但我不知道是否可以從阻止這種情況發生第一名?爲什麼這些目錄有不同的所有者?
謝謝,聽起來像我所需要的。我不明白的是爲什麼開發目錄由www-data擁有。 Capifony以服務器上的root用戶身份運行,所以我猜php正在嘗試創建緩存文件(而不是root用戶)? – ed209 2012-01-05 18:47:13
'cache/dev' dir是由運行CLI版本的php創建的,這個版本與運行web服務器的用戶不同。 'cache/prod'正在運行,因爲它將由網絡服務器運行。這是我的理解:) – 2012-01-05 19:25:21
我明白你的意思,雖然看着目錄所有者,我會說這是另一種方式,/ prod歸root所有,/ dev歸屬於www-data? – ed209 2012-01-06 14:49:14