Symfony2 Assetic:dump -env-prod В доступе отказано Исключение

До того, как я выполнил обновление (обновление composer.phare) с пользователем root, все работало нормально, но теперь, когда я пытаюсь запустить «Assetic:dump -env-prod», я получаю сообщение об ошибке «Отказано в доступе».

[Assetic\Exception\FilterException]
  An error occurred while running:
  '' '-jar' '/home/symfony/www/app/Resources/java/yuicompressor.jar' '--ch
  arset' 'UTF-8' '-o' '/tmp/YUI-OUT-vbRlyu' '--type' 'css' '/tmp/YUI-IN-OoRVH
  Q'
  Error Output:
  sh: 1: : Permission denied
  Input:
  meta.foundation-version{ ...

Я попробовал все решения в этом сообщении Шрифты Fontawesome терпят неудачу после assets:install и assets: дамп

очистить кеш, chown, chgrp и chmod ничего не помогло, всегда одна и та же проблема


person Community    schedule 19.01.2015    source источник


Ответы (2)


Я не рекомендую использовать root для обновления. На мой взгляд, выход состоит в том, чтобы /app/logs /app/cache был доступен для записи для сервера, а папки src и vendor доступны только для чтения для сервера.

Допустим, ваш пользователь и группа: coolman, тогда попробуйте следующее:

# everything is yours
chown coolman:coolman -R .

# all and group can access folders and read files, you as user can additionally write them
chmod ag=rX,u=rwX -R .

# full access to logs and cache for everyone (also the server)
chmod a+rwX -R app/logs app/cache

Вы обновляете свой композитор с помощью пользователя coolman.

Есть только одна маленькая проблема. Журналы могут иметь вид www-data:www-data rw-r--r--, поэтому их нельзя удалить. Так что просто добавьте строку в ваш app.php и ваш файл app/console:

\umask(0000);

Я думаю, что эта строка закомментирована по умолчанию. Это говорит о том, что если в PHP не установлены явные права, то каждый созданный файл получит 0777 - mask = 0777, поэтому вы можете удалить журналы и кэшировать.

person Aitch    schedule 19.01.2015
comment
Я не рекомендую использовать root для обновления ... к счастью, я сделал резервную копию перед обновлением, затем я просто восстановил каталоги /vendor, /web и /app, повторное обновление с владельцем каталога Symfony сделал некоторые изменения chown и chmod для /cache и /logs ... теперь все работает отлично, спасибо - person ; 21.01.2015

Один из способов справиться с правами доступа к файлам, когда вы запускаете веб-приложение, которое требует либо автоматического развертывания, либо постоянных ручных обновлений, таких как использование bin/console от symfony2, — это убедиться, что файлы принадлежат пользователю, под которым работает ваше приложение.

Поскольку вы не предоставили параметры среды, я сделаю несколько предположений и предоставлю вам общий сценарий установки, надеюсь, это поможет вам найти лучшее решение для вашего конкретного случая.

Допущения окружающей среды:

  • ОС: вариант Linux;
  • Веб-сервер: nginx будет работать как www-данные;
  • PHP: php-fpm будет работать как testapp и использовать соединение через сокет для этого приложения;

Общие шаги настройки:

  1. В файле /etc/nginx/nginx.conf убедитесь, что пользователь/группа настроены на www-data;

  2. В файле /etc/php5/fpm/pool.d/apptest.conf убедитесь, что для пользователя и группы установлено значение testapp;

СОВЕТ: Возможно, потребуется создать указанный выше файл, в этом случае вам следует просто скопировать содержимое файла www.conf, расположенного в той же папке.

  1. В файле /etc/php5/fpm/pool.d/apptest.conf убедитесь, что для listen.owner и listen.group установлено значение www-data;

  2. Убедитесь, что в этом файле /etc/php5/fpm/pool.d/apptest.conf есть строка, подобная приведенной ниже:

listen = /var/run/php5-fpm.apptest.sock.

ПРИМЕЧАНИЕ: часть fpm.apptest.sock этой строки выше — это имя файла, который еще не существует, но будет создан при перезапуске php. Преимущество в том, что у вас будет изолированный php-процесс для этого приложения;

  1. a) В случае с nginx и если вы используете соединения через сокеты, обязательно добавьте эту строку в файл конфигурации apptest:

unix:/var/run/php5-fpm.apptest.sock;

б) Если вы используете apache, добавьте эту строку в этот файл конфигурации:

-socket /var/run/php5-fpm.apptest.sock;

  1. Если вы используете Linux, создайте пользователя без пароля, и он должен называться apptest.

Примечание: apptest — это имя вашего приложения, это также будет пользователь, под которым будет работать php, и он также должен быть владельцем файлов/папок приложения.

  1. Перезапустите php и nginx/apache.

Совет: чтобы изменить пользователя в Linux, у которого нет пароля, вы должны иметь привилегии root и запустить: sudo -u apptest -i.

После этого вы должны выполнять все свои команды от имени ранее созданного пользователя apptest, включая запуск symfony2 bin/console.

Это очень общие шаги, поэтому, если вам нужны какие-либо разъяснения, дайте мне знать.

person bluetazmanian    schedule 19.01.2015