Nie udało się utworzyć miniatury, średnich i dużych obrazów

10

Gdy korzystam z nowej instalacji Drupala 7.10, ustawiłem katalog do publicznego przesyłania sites/uploads.

Kiedy dodam obraz do instancji treści, przesyłam oryginał sites/example.org/files/imagename.pngzgodnie z oczekiwaniami. Jednak inne obrazy (miniatury, średnie i duże) nie są tworzone w sites/example.org/styles/*.

Katalog jest czytelny i zapisywalny dla użytkownika PHP5-FPM, więc nie powinno być żadnych uprawnień do wydawania zezwoleń.

Dlaczego to się dzieje? Jak mogę to naprawić?

jvc26
źródło
Jeśli używasz nginx jako serwera WWW, potrzebujesz dodatkowej konfiguracji na swoim vhostie, przeczytaj tutaj, aby uzyskać więcej informacji: drupal.org/node/1048570#comment-4047984
Gnuget

Odpowiedzi:

13

Tak, odpowiedź jest w rzeczywistości nieco bardziej subtelna, niż się spodziewałem. Okazuje się, że imagecachezamiana D7 wymaga uwagi na twoim vgin nginx. Bez wysłania 404 do Drupala z powodu brakujących plików, obrazy nie są tworzone - czegoś, czego początkowo nie zdawałem sobie sprawy, ponieważ zakładałem, że zostały utworzone podczas przesyłania.

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

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

Należy go dodać do definicji serwera i powinieneś być gotowy do wdrożenia. Oczywiście ścieżka może wymagać zmiany w konfiguracji, ale moja była.

jvc26
źródło
1
Zauważ, że część @rewrite musi być odpowiednio zdefiniowana w innym miejscu pliku konfiguracyjnego, aby to działało. To powiedziawszy, już było u mnie i to także rozwiązało mój problem, więc dziękuję jvc26 :)
El Yobo
@ElYobo dobry punkt - zaktualizowałem odpowiedź, aby upewnić się, że jest ona jasna. Dzięki
jvc26,
Czy wpłynęłoby to na konfigurację odwrotnego proxy nginx? Mam ten sam problem i wydaje się, że to nie rozwiązuje problemu.
Grizly,
Jeśli chcesz, aby zostały utworzone na upload drupal.org/project/imageinfo_cache robi to
mikeytown2
Dobry chwyt To ostatecznie doprowadziło mnie do użycia zalecanego pliku serwera nginx zamiast tego, który DigitalOcean konfiguruje automatycznie za pomocą instalacji Drupala jednym kliknięciem.
Meglio
2

Należy sprawdzić zarówno ścieżkę publicznego systemu plików, jak i ścieżkę tymczasową w admin / config / media / file-system

Po ustawieniu obu tych folderów z odpowiednimi uprawnieniami moje podfoldery są automatycznie tworzone po zapisaniu pliku, zapisaniu obrazu i zniknięciu komunikatu o błędzie :-)

sheldonkreger
źródło
2

W moim przypadku problem był spowodowany, ponieważ obrazy zostały pobrane przy użyciu protokołu https,

Dodałem następujące wiersze w bezpiecznych ustawieniach strony, aby zignorować https na ścieżkach plików.

*/files/*

Mam nadzieję, że to komuś pomoże. :)

krzyczeć
źródło
1

Chociaż mówisz, że sprawdziłeś uprawnienia, wciąż od tego bym zaczął, ponieważ często miałem ten problem i prawie zawsze był to problem z uprawnieniami.

Porady ogólne: Przede wszystkim przejdź do admin / config / media / file-system i kliknij „Zapisz konfigurację”. Spowoduje to, że Drupal ponownie oceni uprawnienia do ustawionych katalogów i wyświetli komunikaty o błędach, jeśli znajdzie problem.

Po drugie: zakładam, że masz apache, dane www lub innych użytkowników, którzy są właścicielami serwera, w przeciwieństwie do użytkownika php? W systemie Linux lub Mac, sudo dla tego użytkownika. Próba napisania pliku jako odpowiedni użytkownik to najlepszy sposób, aby naprawdę upewnić się, że masz odpowiednie uprawnienia. Przejdź do strony / domena.com / pliki / i wywołaj „dane echa> nowy_plik; cat nowy_plik;” w terminalu. To sprawdzi, czy rzeczywiście możesz pisać do katalogu zapisu. Zrób to samo ze swoim tmp reż. Mam nadzieję, że ktoś inny może zasugerować, jak wykonać te same czynności w systemie takim jak Windows.

Po trzecie: Aby wykluczyć uprawnienia do katalogu, rekurencyjnie zastosuj 777 katalog plików. Możesz później przywrócić więcej rozsądnych uprawnień

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

Po czwarte: Upewnij się, że katalog tmp, który ma pełne uprawnienia.

Po piąte: Może być konieczne rozpoczęcie debugowania kodu, jeśli już go rozgryzłeś.

Letharion
źródło
Dzięki za sugestie: już wypróbowałem powyższe, nie ma błędów Drupala przy zmianie systemu plików, więc uprawnienia muszą być w porządku. Wszystkie procesy PHP działają jako użytkownik, który może pisać do tego katalogu, więc użytkownik, który działa jako serwer WWW, nie będzie miał żadnego wpływu na możliwości zapisu. Sprawdziłem ręcznie uprawnienia zgodne z zapisem. / tmp jest jak zwykle 777, więc nie ma problemów z zapisem. Usunięta rozbieżność ścieżek była z mojej strony błędem.
jvc26
Jako heads-up problem polegał na konfiguracji nginx, z problemami z przekazywaniem 404s do Drupala, które z kolei wyzwalały tworzenie miniatur.
jvc26
1

Aby uzupełnić odpowiedź Lethariona, oto metoda, której użyłem, aby utworzyć miniatury, średnie ... style obrazu.

Dokładam, że najpierw sprawdziłem wszystkie punkty wymienione powyżej, bez rezultatu.

Następnie (w systemie Linux) edytowałem /usr/local/etc/suphp.conf, aby zmienić umask na php , aby mógł tworzyć pliki ORAZ katalogi z 755 uprawnieniami (maks. Na 744).

I to ostatecznie rozwiązało problem. :)

Kojo
źródło
0

Jestem na Drupal 8.0.3.
W moim przypadku ten folder nie jest generowany podczas instalacji.

sites/default/files/field/image

Mówię to, kopiując ze starszej wersji instalacji Drupal.
Wyświetlane są teraz wszystkie obrazy, w tym miniatury, średnie i duże.

Chetabahana
źródło
-1

Sprawdź plik .htaccess w katalogu głównym i plikach. W razie potrzeby zamień na nowy plik .htaccess

sunil
źródło