Masalah menyajikan gambar yang diunggah di Django

Setelah pengguna mengunggah gambar, dia selalu menampilkan kesalahan 404. Saya pikir ini adalah kesalahan konfigurasi Nginx tetapi saya tidak yakin dan setelah berjam-jam mencari dan mencoba, saya masih tidak mengerti masalahnya.

Inilah settings.py saya:

DEBUG = False
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'static'),
)

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

Selanjutnya, urls.py saya :

urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Dan file konfigurasi Nginx saya:

location ^/static/ {
    autoindex on;
    alias /home/user/mywebsite/site/static;
}

location ^/media/ {
    alias /home/user/mywebsite/site/media;
}

Berikut URL gambar yang dihasilkan: https://www.mywebsite.com/media/CACHE/images/img/venus/758c9f7d70d0c64b5631cc865986de48.jpg (404)

Saya menggunakan Django Imagekit untuk menangani gambar yang diunggah. Saya selalu menganggap URL ini aneh...mungkin ImageKit memerlukan konfigurasi tambahan lagi?

Direktori statis dan media saya ada di /mainappdjango/static, bukan di direktori root. Jika saya tidak melakukan itu, statis saya tidak dimuat. Gambar diunggah dengan baik di server (saya dapat mengaksesnya dengan FTP atau SSH).

Apakah Anda tahu masalah yang menyebabkan kesalahan 404 ini? :/

Terima kasih banyak!


person Zoloom    schedule 20.09.2018    source sumber
comment
Apa jalur menuju gambar media saat Anda melihatnya melalui ssh? Anda bilang mereka ada di /mainappdjango/static/media tapi nginx menunjuk ke mywebsite/site/media. Dan Anda tidak boleh memiliki URL media apa pun di urls.py Anda. Aplikasi Django Anda tidak menyajikan berkas media.   -  person dirkgroten    schedule 21.09.2018
comment
Terima kasih, saya menghapus baris di urls.py saya. Inilah jalur saya di server saya... ~/user/mywebsite/media/CACHE/images/img/venus_kMHza3Y/a154c07683def505960eb63c63ca541e.jpg   -  person Zoloom    schedule 22.09.2018
comment
Apa itu ~? Dan mengapa Anda memiliki /site/ di antara situs web saya dan media di pengaturan nginx Anda?   -  person dirkgroten    schedule 22.09.2018
comment
Ini terminal saya kembali, jadi ~ adalah direktori home saya. situs adalah tempat situs web saya disimpan, misalnya skrip root saya di supervisor adalah: /home/user/mywebsite/site   -  person Zoloom    schedule 22.09.2018
comment
Anda memerlukan path lengkap dan perlu menggunakannya untuk nginx.   -  person dirkgroten    schedule 22.09.2018
comment
Saya tahu ~ adalah direktori home Anda. Saya bertanya apa jalannya ~   -  person dirkgroten    schedule 22.09.2018
comment
Ini adalah /home/pengguna   -  person Zoloom    schedule 22.09.2018
comment
Saya telah melakukan kesalahan: Saya lupa aplikasi Django utama di jalur nginx, karena saya memindahkan direktori statis+media di direktori aplikasi utama saya.   -  person Zoloom    schedule 22.09.2018
comment
Kalau begitu hapus saja /site/ di konfigurasi nginx Anda dan itu akan cocok. Periksa juga log nginx Anda jika masih tidak berfungsi, biasanya di /var/log/nginx   -  person dirkgroten    schedule 22.09.2018
comment
Menempatkan media di dalam direktori aplikasi Anda adalah ide yang buruk karena biasanya direktori aplikasi Anda perlu diambil dari VCS seperti git. Dan media bukan bagian dari gudang   -  person dirkgroten    schedule 22.09.2018
comment
Maaf, saya pasti mati otak malam ini tetapi jalur lengkap direktori media saya adalah: /home/user/mywebsite/site/mywebsite/media/ (Saya sudah mencoba cd ... di atasnya, saya yakin ).   -  person Zoloom    schedule 22.09.2018
comment
Baiklah, struktur direktori apa yang harus saya gunakan untuk memiliki sumber daya lokal dan online? Jika saya tidak meletakkannya di subdirektori aplikasi, saya tidak dapat memuat aset secara online.   -  person Zoloom    schedule 22.09.2018
comment
Perintahnya adalah pwd untuk menampilkan path lengkap. Bagaimanapun, itulah jalur yang dibutuhkan nginx.   -  person dirkgroten    schedule 22.09.2018
comment
Maaf, untuk lokal Anda memerlukan pola url yang saya suruh Anda hapus. Yang terbaik adalah membungkusnya dalam if settings.DEBUG agar tidak digunakan untuk produksi. MEDIA_ROOT Anda mungkin berada di luar direktori proyek Anda, tidak masalah. Juga berfungsi dengan runserver lokal   -  person dirkgroten    schedule 22.09.2018
comment
Saya membuat cd di terminal ke direktori media saya dan menempelkan apa yang saya punya dengan pwd. Untuk Stack saya telah mengubah nama pengguna saya atau lebih dan itu membingungkan, maaf untuk itu, saya perlu menjelaskan: Direktori root saya di Nginx adalah: /home/chuck/domi/site/domi Direktori statis saya adalah: alias / home/chuck/domi/site/domi/statis/; Direktori media saya adalah : alias /home/chuck/domi/site/domi/media;   -  person Zoloom    schedule 22.09.2018
comment
Mari kita melanjutkan diskusi ini dalam chat.   -  person Zoloom    schedule 22.09.2018
comment
Saat Anda mengajukan pertanyaan tentang SO, pastikan Anda menyalin dan menempelkan kode dan konfigurasi. Jangan mengeditnya. Bagaimana Anda ingin kami membantu memperbaiki masalah jika kode yang Anda tampilkan bukan yang Anda gunakan? Jadi sekarang Anda mengatakan alias di nginx sama persis dengan jalur ke media di server Anda? Kemudian lihat log nginx dan periksa kesalahan di sana.   -  person dirkgroten    schedule 22.09.2018
comment
Benar-benar minta maaf untuk itu...Saya memeriksa log Nginx!   -  person Zoloom    schedule 22.09.2018
comment
21/09/2018 23:40:37 [kesalahan] 1480#1480: *3 open() /home/chuck/domi/site/domi/media/CACHE/images/img/venus_kMHza3Y/a154c07683def505960eb63c63ca541e.jpg gagal (2: Tidak ada file seperti itu [...]   -  person Zoloom    schedule 22.09.2018
comment
Jadi konfigurasi baru saya adalah : location /media/ { autoindex on; alias /home/chuck/domi/site/domi/media/; }   -  person Zoloom    schedule 22.09.2018
comment
OK mengerti. Gambar menghilang di CACHE. Saya pikir konfigurasi GIT saya dapat menjelaskan hal itu. Jadi...waktunya untuk melakukan hal yang benar, saya akan membangun kembali proyek saya secara total untuk mendapatkan sesuatu yang jelas. Terima kasih atas bantuan Anda !!   -  person Zoloom    schedule 22.09.2018


Jawaban (1)


Anda memiliki konfigurasi nginx yang salah. harus menambahkan salsh.

location /static/ {
    alias /home/user/mywebsite/site/static/;
    autoindex on;
}
location /media/{
  alias /home/user/mywebsite/site/media/;
  autoindex on;
}
person aman kumar    schedule 20.09.2018
comment
Terima kasih atas jawaban Anda tetapi masih menghasilkan 404 :'( - person Zoloom; 20.09.2018
comment
BTW, apakah '^' diperlukan di sana? - person Zoloom; 20.09.2018
comment
Haruskah saya membuat entri Nginx untuk cache? - person Zoloom; 20.09.2018
comment
dapatkah Anda memeriksa jalur ini di server /home/user/mywebsite/site/media/CACHE/images/img/venus/758c9f7d70d0c64b5631cc865986de48.jpg ini ada atau tidak - person aman kumar; 21.09.2018
comment
Itu ada :/ Masalah ini tidak masuk akal bagi saya. - person Zoloom; 21.09.2018
comment
bisakah Anda mencoba menghapus ^ di nginx - person aman kumar; 21.09.2018
comment
Itu tidak mengubah apa pun :/ - person Zoloom; 21.09.2018