我正在用Symfony gem使用Capistrano 3将Symfony2 Web应用程序部署到Ubuntu 14.04上。 在caching文件夹上权限设置不正确:因为我正在使用symfony gem,所以应该在caching文件夹上设置权限,而且在部署期间,我确实在输出中看到了这个成功:
cd /var/www/releases/20151015083314 && ( SYMFONY_ENV=prod /usr/bin/env mkdir -pv app/cache
但是,当我预览我的networking应用程序,我在我的日志中得到以下错误
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的第二种方法遵循权限指南。 我在/ current中和/ shared中的日志文件夹上设置了caching文件夹的权限。
我的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应用程序试图在/ release中创buildcaching文件夹,而不是在/ current中创build?
我也按照这个指南工作,如果我部署后设置权限,但后来我有一个新的部署后相同的caching错误。
UPDATE
我再次检查我的服务器,它是作为万维网数据运行。 我做了以下
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正在部署在“www-data”组中的'ubuntu'。 我已经检查了发布/ 20151029153350目录的权限,它是:
drwxrwxr-x 3 ubuntu ubuntu 4096 Oct 30 10:13 20151029153350
我建议你向你的linked_dirs
添加一个app/cache
的条目,然后创建shared/app/cache
并将其权限设置为可以被web服务器用户访问。 通过这种方式,部署中保留了权限。
或者,您可以使用此插件来设置已部署代码的权限。
由于/current
是/releases/[release_timestamp]
的符号链接,有些代码将解析符号链接并直接访问它。