Не удается создать миниатюру, средние и большие изображения

10

При использовании новой установки Drupal 7.10 я установил каталог для публичных загрузок в sites/uploads.

Когда я затем добавляю изображение в экземпляр контента, я загружаю оригинал, sites/example.org/files/imagename.pngкак и ожидалось. Тем не менее, другие изображения (миниатюры, средние и большие) не создаются в sites/example.org/styles/*.

Каталог доступен для чтения и записи пользователем PHP5-FPM, поэтому не должно быть никаких проблем с разрешениями.

Почему это происходит? Как я могу это исправить?

jvc26
источник
Если вы используете nginx в качестве веб-сервера, вам нужна дополнительная конфигурация в вашем vhost, читайте здесь для получения дополнительной информации: drupal.org/node/1048570#comment-4047984
Gnuget

Ответы:

13

Да, ответ на самом деле немного более тонкий, чем я предполагал. Оказывается, что imagecacheзамена D7 требует некоторого внимания в вашем nginx vhost. Без 404-х, отправляемых в Drupal за отсутствующими файлами, изображения не создаются - то, чего я изначально не осознавал, так как предполагал, что они были созданы при загрузке.

location @rewrite {
    rewrite ^/(.*)$ /index.php?q=$1;
}

location ~ ^/sites/.*/files/styles/ {
    try_files $uri @rewrite;
}

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

jvc26
источник
1
Обратите внимание, что часть @rewrite должна быть определена соответствующим образом в другом месте файла конфигурации, чтобы это работало. Тем не менее, это уже было в моем, и это также решило мою проблему, так что спасибо jvc26 :)
El Yobo
@ElYobo хороший момент - обновили ответ, чтобы убедиться, что это ясно. Спасибо
jvc26
Повлияет ли это на конфигурацию обратного прокси-сервера nginx? У меня та же проблема, но это, похоже, не исправляет.
Grizly
Если вы хотите, чтобы они создавались при загрузке, это делает
drupal.org/project/imageinfo_cache
Хороший улов. В конечном итоге это привело меня к использованию рекомендованного файла сервера nginx вместо того, который DigitalOcean конфигурирует автоматически при установке Drupal одним щелчком мыши.
Мельо
2

Обязательно проверьте путь к публичной файловой системе и временный путь по адресу admin / config / media / file-system

После того, как обе эти папки установлены с правильными разрешениями, мои подпапки автоматически создаются при сохранении файла, сохранении изображения и исчезновении сообщения об ошибке :-)

sheldonkreger
источник
2

В моем случае проблема была вызвана тем, что изображения были получены с использованием https,

Я добавил следующие строки в настройках защищенной страницы, чтобы игнорировать https на пути к файлам.

*/files/*

Надеюсь, это кому-нибудь поможет. :)

shrish
источник
1

Хотя вы и говорите, что проверили разрешения, я все равно с этого и начну, поскольку у меня часто возникала эта проблема, и почти всегда это была проблема с разрешениями.

Общий совет: Прежде всего, зайдите в admin / config / media / file-system и нажмите «Сохранить конфигурацию». Это заставит Drupal переоценить разрешения установленных каталогов и выдаст вам сообщения об ошибках, если обнаружит проблему.

Второе: я предполагаю, что у вас есть apache, www-data или другие пользователи, которые владеют веб-сервером, а не пользователем php? В системе Linux или Mac sudo этому пользователю. Попытка написать файл с правами пользователя - лучший способ убедиться, что у вас есть необходимые права. Перейдите на сайты / domain.com / files / и вызовите «echo data> new_file; cat new_file;» в терминале. Это проверит, что вы действительно можете писать в каталог записи. Сделайте то же самое с вашим TMP DIR. Надеюсь, кто-то еще может предложить, как выполнить те же действия в системе, такой как Windows.

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

find . -type d -print0 | xargs -0 chmod 755
find . -type f -print0 | xargs -0 chmod 644

В-четвертых: убедитесь, что каталог tmp имеет полные разрешения.

Пятое. Возможно, вам придется начать отладку кода, если вы уже поняли его.

Letharion
источник
Спасибо за предложения: уже попробовал вышеизложенное, никаких ошибок от Drupal при изменении файловой системы, поэтому разрешения должны быть в порядке. Все процессы PHP выполняются как пользователь, который может писать в этот каталог, поэтому пользователь, который запускает веб-сервер, не влияет на возможности записи. Проверил вручную разрешения, совместимые с записью. / tmp как обычно 777, поэтому проблем с записью нет. Несоответствие пути было отсортировано было ошибкой с моей стороны.
jvc26
Кстати, проблема была в конфигурации nginx, с проблемами при передаче 404-х в Drupal, которые, в свою очередь, запускают создание миниатюр.
jvc26
1

Чтобы завершить ответ Letharion, вот метод, который я использовал для создания эскизов, средних ... стилей изображения.

Я уточнил, что сначала проверил все пункты, перечисленные выше, безрезультатно.

Затем (в ОС Linux) я отредактировал /usr/local/etc/suphp.conf, чтобы изменить umask на php , чтобы он мог создавать файлы и каталоги с максимальным разрешением 755 (максимум на 744).

И это окончательно решило проблему. :)

Коджо
источник
0

Я на Drupal 8.0.3.
В моем случае эта папка не создается при установке.

sites/default/files/field/image

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

Chetabahana
источник
-1

Проверьте ваш файл .htaccess в корневом каталоге и каталоге файлов. Замените новым файлом .htaccess, если требуется

Сунил
источник