2015-02-10 3 views
0

ОбзорApache не может писать на пути

Я использую Laravel 4.2 с функцией загрузки изображения. Я настроил его на Homestead, но недавно я удалил Nginx и вместо этого использовал сайт Apache (из-за необходимости использования событий, отправленных сервером).

Прежде чем я перешел из Nginx в Apache, функция загрузки файлов работала нормально. Он также отлично работает на промежуточном сервере с Apache.

Ошибка

Я использую библиотеку изображений Intervention для обработки загрузки изображений. Когда я пытаюсь загрузить файл, я получаю следующее в моем laravel.log файле:

Can't write image data to path (/home/vagrant/projects/projectname/public/assets/pics/profile/photos/f55f0ae2-2d1a-4fdd-b9be-39d8a509baa3.jpg) 

Что я Пробовал

Я думал, что это была только простое разрешение ошибок. Я зашел так далеко, чтобы chmod моих asset каталогов 0777, изменить владельца каталога для www-data, создать новую группу под названием web с www-data и изменить владельца группы к тому, что (в основном все в this answer и более) и до сих пор это Безразлично Не работай.

Каталог определенно существует, и, как я уже упоминал, он работал до перехода на Apache (я не совсем уверен, связано ли это, но кажется вероятным).

Мой /var/log/apache2/error.log также пуст.

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

Права доступа Пример папки

drwxr-xr-x 1 vagrant vagrant 272 Jan 26 11:07 assets/pics 
drwxr-xr-x 1 vagrant vagrant 170 Jan 26 10:11 assets/pics/defaults 
drwxr-xr-x 1 vagrant vagrant 714 Jan 26 14:10 assets/pics/forums 
drwxr-xr-x 1 vagrant vagrant 646 Jan 26 14:10 assets/pics/forums/thumbs 
drwxr-xr-x 1 vagrant vagrant 170 Jan 20 18:02 assets/pics/gallery 
drwxr-xr-x 1 vagrant vagrant 3026 Jan 26 13:24 assets/pics/messages 
drwxr-xr-x 1 vagrant vagrant 2992 Jan 26 13:24 assets/pics/messages/thumbs 
drwxr-xr-x 1 vagrant vagrant 136 Jan 8 17:27 assets/pics/profile 
drwxr-xr-x 1 vagrant vagrant 136 Feb 10 14:48 assets/pics/profile/photos 
drwxr-xr-x 1 vagrant vagrant 102 Feb 10 14:51 assets/pics/profile/photos/thumbs 

По какой-то причине владелец/группа до сих пор vagrant, даже когда я chown их. Я пробовал с sudo chown и делаю sudo -s.

+0

Просто чтобы убедиться, что ты использовать (рекурсивный) опцию '-r' при запуске' chmod' и/или 'chgrp' на' assets' реж? Поскольку поддиры также нуждаются в одинаковых разрешениях.Попробуйте запустить '' cd/home/vagrant/projects/projectname/public && ls -dl 'find assets/-type d''' и опубликовать вывод. – Bogdan

+0

Вы проверили разрешения конкретной папки? '/ home/vagrant/projects/projectname/public/assets/pics/profile/photos /' У меня была очень похожая проблема, прежде чем я подумал, что рекурсивный 'chmod' изменил все разрешения своих подкаталогов, но были еще несколько отставших. Иногда также, если другой системный пользователь создает свой собственный каталог или файл, он имеет свои собственные разрешения по умолчанию, которые различны. Если вы можете найти этого пользователя, добавьте Apache в свою группу. – cchapman

+0

@Bogdan @ cchapman900 Я обновил свой вопрос, чтобы включить выход разрешений папки. По какой-то причине владелец по-прежнему «бродяжничает» ... – Sacha

ответ

1

попробуйте изменить Vagrantfile включить эту линию до конца Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| блока:

config.vm.synced_folder "/path/to/laravel/app", "/home/vagrant/projects/projectname", :owner => "www-data", :group => "www-data", :mount_options => ["dmode=775", "fmode=664"] 

Строка "/path/to/laravel/app" должна указывать на Dir вы работаете вне машины Vagrant. Это должно заставить владельца файла и разрешения быть теми, которые вы указываете для всех файлов проекта (поэтому они не переопределены vagrant). После внесения изменений вам потребуется перезапустить виртуальную машину.

+0

Да, отлично! Спасибо! – Sacha

0

Как вы делаете свой chown? Он должен быть

chown USERNAME GROUP -R /path/to/file