Impossibile creare immagini in miniatura, medie e grandi


10

Quando utilizzo una nuova installazione di Drupal 7.10, ho impostato la directory per i caricamenti pubblici su sites/uploads.

Quando aggiungo quindi un'immagine a un'istanza di contenuto, ricevo l'originale caricato sites/example.org/files/imagename.pngcome previsto. Tuttavia, le altre immagini (miniatura, media e grande) non vengono create in sites/example.org/styles/*.

La directory è leggibile e scrivibile dall'utente PHP5-FPM e quindi non dovrebbero esserci problemi di autorizzazione.

Perché succede? Come posso ripararlo?


Se stai utilizzando nginx come web server hai bisogno di una configurazione aggiuntiva nel tuo vhost, leggi qui per maggiori informazioni: drupal.org/node/1048570#comment-4047984
Gnuget

Risposte:


13

Bene, la risposta è in effetti un po 'più sottile di quanto pensassi. Si scopre che la imagecachesostituzione di D7 richiede una certa attenzione nel tuo vhost nginx. Senza i 404 inviati a Drupal per i file mancanti, le immagini non vengono create - qualcosa che non avevo realizzato inizialmente, dato che pensavo fossero state create al momento del caricamento.

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

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

Deve essere aggiunto alla definizione del tuo server e dovresti essere pronto per il roll. Chiaramente, potrebbe essere necessario modificare il percorso per la configurazione, ma per il mio lo era.


1
Si noti che la parte @rewrite deve essere definita in modo appropriato altrove nel file di configurazione affinché funzioni. Detto questo, era già nel mio e questo ha risolto anche il mio problema, quindi grazie jvc26 :)
El Yobo,

@ElYobo buon punto - ho aggiornato la risposta per assicurarsi che sia chiaro. Grazie
jvc26,

Ciò influirebbe su una configurazione proxy inversa nginx? Ho lo stesso problema e questo non sembra risolverlo.
Grizly,

Se vuoi che vengano creati su upload drupal.org/project/imageinfo_cache lo fa
mikeytown2

Buona pesca. Questo alla fine mi ha portato a utilizzare il file del server consigliato da nginx invece di quello che DigitalOcean configura automaticamente con un'installazione Drupal con un clic.
Meglio,

2

Assicurati di controllare sia il percorso del file system pubblico sia il percorso temporaneo su admin / config / media / file-system

Una volta impostate entrambe le cartelle con le autorizzazioni corrette, le mie sottocartelle vengono create automaticamente quando si salva un file, l'immagine viene salvata e il messaggio di errore scompare :-)


2

Nel mio caso il problema stava causando perché le immagini sono state recuperate utilizzando https,

Ho aggiunto le seguenti righe alle impostazioni della pagina sicura per ignorare https sui percorsi dei file.

*/files/*

Spero che questo aiuti qualcuno. :)


1

Mentre dici che hai controllato le autorizzazioni, è ancora da lì che vorrei iniziare, dato che ho avuto questo problema da solo, spesso, ed è quasi sempre stato un problema di autorizzazioni.

Consiglio generale: prima di tutto vai su admin / config / media / file-system e fai clic su "Salva configurazione". Questo farà sì che Drupal rivaluti le autorizzazioni delle directory impostate e ti darà messaggi di errore se rileva un problema.

Secondo: suppongo che tu abbia un apache, o www-data, o altri utenti, che possiede il webserver, al contrario dell'utente php? Su un sistema Linux o Mac, sudo per quell'utente. Cercare di scrivere un file come l'utente giusto è il modo migliore per assicurarti davvero di avere le autorizzazioni giuste. Vai a sites / domain.com / files / e chiama "echo data> new_file; cat new_file;" in un terminale. Ciò verificherà che puoi effettivamente scrivere nella directory di scrittura. Fai lo stesso con la tua directory tmp. Speriamo che qualcun altro possa suggerire come eseguire le stesse azioni su un sistema come Windows.

Terzo: per escludere le autorizzazioni della directory, applicare in modo ricorsivo 777 la directory dei file. È possibile ripristinare autorizzazioni più sane in seguito con

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

Quarto: assicurarsi che la directory tmp abbia le permssions complete.

Quinto: potrebbe essere necessario iniziare il debug del codice se lo hai già capito.


Grazie per i suggerimenti: ho già provato quanto sopra, nessun errore da Drupal sulla modifica del file system, quindi le autorizzazioni devono andare bene. I processi PHP vengono eseguiti come l'utente che può scrivere in quella directory, quindi l'utente che il server web esegue non farà alcuna differenza per la capacità di scrittura. Ho controllato manualmente le autorizzazioni compatibili con la scrittura. / tmp è come al solito 777 quindi nessun problema di scrittura lì. La discrepanza del percorso è stata risolta è stato un errore da parte mia.
jvc26,

Come un avvertimento, il problema era quello della configurazione di nginx, con problemi per il passaggio di 404 secondi a Drupal che a loro volta innescavano la creazione di miniature.
jvc26

1

Per completare la risposta Letharion, ecco il metodo che ho usato per ottenere stili di immagine in miniatura, medi ...

Preciso di aver prima controllato tutti i punti sopra elencati, senza risultato.

Quindi (su un sistema operativo Linux), ho modificato /usr/local/etc/suphp.conf per cambiare umask su php , in modo che potesse creare file E directory con un massimo di 755 autorizzazioni (era su un massimo di 744).

E questo ha risolto definitivamente il problema. :)


0

Sono su Drupal 8.0.3.
Nel mio caso questa cartella non è generata sull'installazione.

sites/default/files/field/image

Quindi l'ho messo copiando dalla versione precedente dell'installazione di Drupal.
Tutte le immagini tra cui miniature, medie e grandi vengono ora visualizzate.


-1

Controlla il tuo file .htaccess nella directory principale e dei file. Sostituire con il nuovo file .htaccess, se necessario

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.