2015-10-16 63 views
0

我正在使用Capistrano 3symfony 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 
+0

部署用戶('ubuntu')是否與您的網絡服務器運行時相同? –

+0

我相信網絡服務器正在'www-data'下運行,但我不知道如何找到它? – Patrick

+0

你可以使用'ps -ef | grep [nameofwebserver]'看到它。名稱可能是'httpd','nginx','apache'等等。這對我的答案中的選項2很有用。 –

回答

0

我建議你添加到您的linked_dirs一個條目app/cache,然後創建shared/app/cache並設置其權限是由網絡訪問服務器用戶。通過這種方式,部署中保留了權限。

或者,您可以使用this plugin來設置已部署代碼的權限。

由於/current是符號鏈接/releases/[release_timestamp],有些代碼將解析符號鏈接並直接訪問它。

+0

[Symfony Gem](https://github.com/capistrano/symfony)已經依賴[文件權限](https:/ /github.com/capistrano/file-permissions)。 Symfony Gem還設置了'set:linked_dirs,[fetch(:log_path),fetch(:web_path)+「/ uploads」]' – Patrick