Я развертываю веб-приложение Symfony2 на Ubuntu 14.04, используя Capistrano 3 с symfony gem. Неправильно установлены разрешения для папки кеша: поскольку я использую гем symfony, разрешения должны быть установлены на папка кеша, и я действительно вижу это на выходе во время успешного развертывания:
cd /var/www/releases/20151015083314 && ( SYMFONY_ENV=prod /usr/bin/env mkdir -pv app/cache
Однако, когда я просматриваю свое веб-приложение, я получаю следующую ошибку в моих журналах
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.
В моих сценариях капистрано есть следующее:
# 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
Спасибо
ОБНОВЛЕНИЕ
что странно, почему приложение symfony2 пытается создать папку кеша в / Release, а не в / current?
Я также следовал этому руководству, которое работало, если я установил разрешения после развертывания, но затем я получил ту же ошибку кеша после нового развертывания.
ОБНОВЛЕНИЕ
Я снова проверил свой сервер, и он работает как www-data. Я сделал следующее
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-data». Я проверил разрешения каталога Release / 20151029153350, и это:
drwxrwxr-x 3 ubuntu ubuntu 4096 Oct 30 10:13 20151029153350
ps -ef | grep [nameofwebserver]
, чтобы увидеть это. Имена могут бытьhttpd
,nginx
,apache
и так далее. Это было бы полезно для варианта 2 моего ответа. - person will_in_wi   schedule 16.10.2015ps -ef | grep httpd
, он вернетubuntu 14632 14613 0 12:51 pts/0 00:00:00 grep --color=auto httpd
. Я делаюps -ef | grep apache2
, он возвращает длинный список, включающийubuntu 14630 14613 0 12:51 pts/0 00:00:00 grep --color=auto apache2
- person Patrick   schedule 16.10.2015ps aux | egrep '(apache|httpd)'
, и он дал мнеroot 18281 0.0 0.0 8164 912 pts/0 S+ 17:48 0:00 egrep --color=auto (apache|httpd)
. Теперь веб-приложение правильно записывает папку кеша и работает после нового развертывания. Кто-нибудь знает, как это произошло, а также почему он не работает как пользовательские «www-data»? Благодарность - person Patrick   schedule 16.10.2015APACHE_USER=$(ps axho user,comm|grep -E "httpd|apache"|uniq|grep -v "root"|awk 'END {if ($1) print $1}')
, а затемecho $APACHE_USER
, и она выводит www-data. - person Patrick   schedule 30.10.2015