Django : Медиафайл не найден при удалении, несмотря на то, что он правильно записан при создании (PROD)
Я долгое время тщетно искал истоки этого вопроса.
Все работает хорошо на разработке: загрузка csv файла + удаление, но на производстве, файл хорошо загружается при сохранении моей модели, но он не найден, когда я хочу удалить его.
views.py (имя_файла = sources/newone/egr-2022-light_copie.csv)
os.remove(f"media/{str(flow.fl_file_name)}")
settings.py. (файл пользовательских настроек для prod)
BASE_DIR = Path(__file__).resolve().parent.parent
[...]
MEDIA_ROOT = '/home/django/httpdocs/gsm2/media'
MEDIA_URL = '/media/'
apache conf (+ssl)
[...]
Alias /static /home/django/httpdocs/gsm2/static
<Directory /home/django/httpdocs/gsm2/static>
Require all granted
</Directory>
Alias /media /home/django/httpdocs/gsm2/media
<Directory /home/django/httpdocs/gsm2/media>
Require all granted
</Directory>
<Directory /home/django/httpdocs/gsm2/gsm2>
[...]
Я пытался :
- измените путь, используемый в remove(), удалив
media/... безуспешно. - изменить путь, используемый в remove(), добавив
gsm2/передmedia/... бесполезно. - заменить путь к медиафайлу settings.py на
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')... не лучше .
- Изменил права на папку на 777 и право собственности на 'django' ... тщетно
Есть идеи о возможном происхождении моих болей?
Найдено обходное решение с помощью решения @Naushad
Заменен :
os.remove(f"media/{str(flow.fl_file_name)}")
с :
file = os.path.join(os.path.dirname(os.path.dirname(__file__)),
f"media/{str(flow.fl_file_name)}")
os.remove(file)
Все еще нужно проанализировать это решение для хорошего понимания.