Путь загрузки файла Symfony3 не работает в производстве

Я делаю небольшой сайт-портфолио с Symfony. Все работает на моем локальном компьютере, я могу загружать элементы портфолио и т.д.

Однако на моем дроплете (Ubuntu 16.04.1 x64, работает Nginx)

Поэтому я следую руководству по загрузке файлов на http://symfony.com/doc/current/controller/upload_file.html

Все работает локально, но я получаю ошибку 500 на своем производственном дроплете. Я проверил свои журналы на наличие ошибок, и кажется, что путь, который я установил в своих параметрах:

(portfolio_directory: '%kernel.root_dir%/../web/images/portfolio')

выдает следующую ошибку

[2016-09-20 12:36:33] request.CRITICAL: Uncaught PHP Exception Symfony\Component\HttpFoundation\File\Exception\FileException: "Unable to write in the "/var/www/wsly/www/app/../web/images/portfolio" directory" at /var/www/wsly/www/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/File/File.php line 113 {"exception":"[object] (Symfony\\Component\\HttpFoundation\\File\\Exception\\FileException(code: 0): Unable to write in the \"/var/www/wsly/www/app/../web/images/portfolio\" directory at /var/www/wsly/www/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/File/File.php:113)"}

Теперь разрешения для всей папки с изображениями установлены на 777 (я использовал для этого chmod -R 777), поэтому я не думаю, что проблема на самом деле в разрешении, а в том, что путь неверен? Не уверен, но app/../web не является допустимым путем, кажется, он буквально копирует путь, поскольку корневой каталог является каталогом приложения? вместо того, чтобы подняться на один уровень с помощью /../

Кажется, я не могу понять это.


person wesvb    schedule 20.09.2016    source источник
comment
/var/www/wsly/www/app/../web/images/portfolio звучит для меня совершенно правильно. Что происходит, когда вы входите через терминал и вводите ls -l /var/www/wsly/www/app/../web/images/portfolio?   -  person Ben Hillier    schedule 20.09.2016
comment
Ваш веб-сервер работает как пользователь, отличный от установки Symfony? Если это так, веб-пользователю нужен доступ по всему пути к файлу!   -  person Ben Hillier    schedule 20.09.2016
comment
@BenHillier Я получаю список всех изображений в папке (там еще есть некоторые изображения от dev, так как я использую git для их обслуживания и, видимо, забыл добавить его в gitignore). Все работает под пользователем root, если не ошибаюсь.   -  person wesvb    schedule 20.09.2016
comment
Я почему-то сомневаюсь, что демон вашего веб-сервера работает от имени пользователя root. Это было бы большим риском для безопасности, и любая настройка по умолчанию настроила бы его таким образом. Я больше Apache, чем пользователь Nginx, поэтому я не могу дать вам много информации о том, как это проверить.   -  person Ben Hillier    schedule 20.09.2016
comment
@BenHillier, возможно ли, что папка должна принадлежать www-data, а не пользователю root?   -  person wesvb    schedule 20.09.2016
comment
@BenHillier спасибо за понимание, похоже, это проблема. Я только что понял, что моя среда разработки - это apache, а не nginx, а пользователь root - это другой пользователь, чем www-data. Я действительно новичок в серверах и тому подобном, так что большое спасибо за это!   -  person wesvb    schedule 20.09.2016


Ответы (1)


У меня была та же проблема, и я провел много дней, экспериментируя. В конце концов я исправил ее, используя этот формат для пункта назначения.

upload_destination: ../web/images/profiles
person Dimitris    schedule 18.10.2017