Gagal membuat gambar mini, sedang, dan besar

10

Saat menggunakan instalasi baru Drupal 7.10, saya telah menetapkan direktori untuk unggahan publik sites/uploads.

Ketika saya kemudian menambahkan gambar ke instance konten, saya mendapatkan yang asli diunggah sites/example.org/files/imagename.pngseperti yang diharapkan. Namun, gambar lain (gambar kecil, sedang dan besar) tidak dapat dibuat di sites/example.org/styles/*.

Direktori ini dapat dibaca dan ditulis oleh pengguna PHP5-FPM, dan karenanya tidak boleh ada masalah izin bijaksana.

Mengapa ini terjadi? Bagaimana saya bisa memperbaikinya?

jvc26
sumber
Jika Anda menggunakan nginx sebagai server web, Anda memerlukan konfigurasi tambahan di vhost Anda, baca di sini untuk informasi lebih lanjut: drupal.org/node/1048570#comment-4047984
Gnuget

Jawaban:

13

Benar, jawabannya sebenarnya sedikit lebih halus daripada yang saya sadari. Ternyata imagecachepenggantian D7 membutuhkan perhatian di nginx vhost Anda. Tanpa 404 yang dikirim ke Drupal untuk file yang hilang, gambar tidak dibuat - sesuatu yang awalnya tidak saya sadari, karena saya berasumsi mereka dibuat saat diunggah.

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

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

Itu perlu ditambahkan ke definisi server Anda, dan Anda harus siap untuk roll. Jelas, jalur mungkin perlu diubah untuk pengaturan Anda, tetapi untuk saya itu.

jvc26
sumber
1
Perhatikan bahwa bagian @rewrite perlu didefinisikan secara tepat di tempat lain dalam file konfigurasi agar ini berfungsi. Yang mengatakan, itu sudah ada di tangan saya dan ini memecahkan masalah saya juga, jadi terima kasih jvc26 :)
El Yobo
@ElYobo poin bagus - telah memperbarui jawaban untuk memastikan yang jelas. Terima kasih
jvc26
Apakah ini akan memengaruhi konfigurasi proxy reverse nginx? Saya punya masalah yang sama dan ini sepertinya tidak memperbaikinya.
Grizly
Jika Anda ingin mereka dibuat di unggah drupal.org/project/imageinfo_cache melakukannya
mikeytown2
Tangkapan yang bagus. Ini akhirnya membuat saya menggunakan file server yang direkomendasikan nginx alih-alih yang dikonfigurasikan DigitalOcean secara otomatis dengan instalasi Drupal satu-klik.
Meglio
2

Pastikan untuk memeriksa jalur sistem file publik dan jalur sementara di admin / config / media / sistem file

Setelah saya mengatur kedua folder tersebut dengan izin yang benar, subfolder saya dibuat secara otomatis saat saya menyimpan file, gambar disimpan, dan pesan kesalahannya hilang :-)

sheldonkreger
sumber
2

Dalam kasus saya masalah ini disebabkan karena gambar diambil menggunakan https,

Saya menambahkan baris berikut pada pengaturan halaman aman untuk mengabaikan https pada jalur file.

*/files/*

Semoga ini bisa membantu seseorang. :)

semak
sumber
1

Meskipun Anda mengatakan bahwa Anda telah memeriksa izin, di situlah saya akan mulai, karena saya sendiri sering mengalami masalah ini, dan itu hampir selalu menjadi masalah izin.

Saran umum: Pertama-tama, buka admin / config / media / sistem file, dan klik "Simpan konfigurasi". Ini akan menyebabkan Drupal mengevaluasi kembali izin direktori yang ditetapkan, dan akan memberi Anda pesan kesalahan jika menemukan masalah.

Kedua: Saya berasumsi bahwa Anda memiliki apache, atau www-data, atau pengguna lain, yang memiliki server web, yang bertentangan dengan pengguna php? Pada sistem Linux atau Mac, sudo ke pengguna itu. Mencoba menulis file sebagai pengguna yang tepat , adalah cara terbaik untuk benar-benar memastikan bahwa Anda memiliki izin yang tepat. Buka situs / domain.com / file /, dan panggil "echo data> new_file; cat new_file;" di terminal. Ini akan memverifikasi bahwa Anda benar-benar dapat menulis ke direktori tulis. Lakukan hal yang sama dengan dir tmp Anda. Semoga orang lain dapat menyarankan cara melakukan tindakan yang sama pada sistem seperti windows.

Ketiga: Untuk mengesampingkan izin direktori, terapkan 777 direktori file secara rekursif. Anda dapat mengembalikan lebih banyak izin yang waras setelahnya dengan

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

Keempat: Pastikan direktori tmp yang memiliki izin penuh.

Kelima: Anda mungkin perlu mulai men-debug kode jika Anda sudah menemukannya sekarang.

Pelajaran
sumber
Terima kasih atas sarannya: Sudah mencoba yang di atas, tidak ada kesalahan dari Drupal pada perubahan sistem file, jadi izin harus baik-baik saja. Semua proses PHP dijalankan sebagai pengguna yang dapat menulis ke direktori itu, sehingga pengguna yang dijalankan oleh server web tidak akan membuat perbedaan dalam kemampuan menulis. Telah memeriksa secara manual izin yang kompatibel dengan tulis. / tmp seperti biasa 777 jadi tidak ada masalah menulis di sana. Perbedaan jalur telah diurutkan adalah kesalahan pada bagian saya.
jvc26
Sebagai kepala, masalah adalah salah satu konfigurasi nginx, dengan masalah untuk pengoper 404s ke Drupal yang pada gilirannya memicu pembuatan thumbnail.
jvc26
1

Untuk menyelesaikan jawaban Letharion, berikut adalah metode yang saya gunakan untuk mendapatkan thumbnail, sedang ... gaya gambar dibuat.

Saya tepat bahwa saya pertama kali memeriksa semua poin yang tercantum di atas, tanpa hasil.

Kemudian (pada OS Linux), saya mengedit /usr/local/etc/suphp.conf untuk mengubah umask di php , sehingga ia dapat membuat file DAN direktori dengan 755 izin maks (maksimum 744 maks).

Dan ini secara definitif memecahkan masalah. :)

Kojo
sumber
0

Saya menggunakan Drupal 8.0.3.
Dalam kasus saya folder ini tidak dibuat pada instalasi.

sites/default/files/field/image

Jadi saya menaruhnya dengan menyalin dari versi Drupal instalasi yang lebih lama.
Semua gambar termasuk gambar kecil, sedang dan besar sekarang muncul.

Chetabahana
sumber
-1

Periksa file .htaccess Anda di direktori root dan file. Ganti dengan file .htaccess baru jika diperlukan

sunil
sumber