我正在使用Capistrano 3和symfony gem將Symfony2 Web應用程序部署到Ubuntu 14.04上。權限設置不正確的緩存文件夾:Capistrano 3在緩存和版本上未正確設置權限
cd /var/www/releases/20151015083314 && (SYMFONY_ENV=prod /usr/bin/env mkdir -pv app/cache
然而,當: 因爲我使用的是symfony gem的權限應該得到的緩存文件夾設置而事實上我也部署是成功的過程中看到此輸出我預覽我的web應用程序我碰到下面的錯誤在我的日誌
PHP Warning: mkdir(): Permission denied in /var/www/releases/20151015082855/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpCache/Store.php on line 40
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unable to create the cache directory (/var/www/releases/20151015082855/app/cache/staging)\n'
取出發佈文件夾,但這個現在似乎已經消失後,我手動刪除最早的文件夾時,我也有一個權限錯誤。
我使用用戶'ubuntu'進行部署。我也嘗試使用ACL的第二種方法遵循權限指南here。我在/ current中和/ shared中的日誌文件夾上設置了緩存文件夾的權限。
我Capistrano的腳本有以下幾點:
# deploy.rb
set :pty, true
set :ssh_options, {
user: 'ubuntu',
keys: ['~/.ssh/id_rsa'],
forward_agent: true,
auth_methods: ["publickey"]
}
set :linked_files, fetch(:linked_files, []).push('app/config/parameters.yml', 'web/.htaccess', 'web/robots.txt')
set :linked_dirs, fetch(:linked_dirs, []).push('app/logs', 'src/Helios/CoreBundle/Resources/translations', 'app/spool')
# staging.rb
server 'ec2-00-000-000-000.eu-west-1.compute.amazonaws.com', user: 'ubuntu', roles: %w{app db web}
我與
bundle exec cap staging deploy --trace
感謝
UPDATE部署
是什麼奇怪的是,爲什麼在Symfony2的應用嘗試並創建緩存文件夾內/釋放,而不是在/當前?
我也跟着this guide,如果我在部署後設置權限,那麼它就會工作,但是在全新部署後我得到了相同的緩存錯誤。
UPDATE
我有我的服務器上檢查了一遍,它正在運行作爲WWW的數據。我做了以下
APACHE_USER=$(ps axho user,comm|grep -E "httpd|apache"|uniq|grep -v "root"|awk 'END {if ($1) print $1}')
echo $APACHE_USER
當我部署與capistrano它無法刪除舊版本文件夾。我得到多行對於每個文件不能除去:
rm: cannot remove ‘20151029153350/app/cache/staging/.....’: Permission denied
用戶Capistrano的正在部署爲是「ubuntu的」,這是「WWW的數據」小組。我已經檢查了釋放/ 20151029153350目錄的權限,它是:
drwxrwxr-x 3 ubuntu ubuntu 4096 Oct 30 10:13 20151029153350
部署用戶('ubuntu')是否與您的網絡服務器運行時相同? –
我相信網絡服務器正在'www-data'下運行,但我不知道如何找到它? – Patrick
你可以使用'ps -ef | grep [nameofwebserver]'看到它。名稱可能是'httpd','nginx','apache'等等。這對我的答案中的選項2很有用。 –