Fix media file storage path and permissions
- Fix MEDIA_ROOT path to match Docker volume mount (/app/myproject/media) - Update docker-compose.yml volume mounts to match MEDIA_ROOT - Add setup_directories() function in entrypoint.sh to create media directories with proper permissions - Add logging to TenantAwareFileSystemStorage for debugging - Fix is_returned flag logic improvements (from previous work)
This commit is contained in:
@@ -128,10 +128,16 @@ class TenantAwareFileSystemStorage(FileSystemStorage):
|
||||
# Добавляем tenant_id в путь для сохранения на диск
|
||||
tenant_aware_name = self._get_tenant_path(name)
|
||||
|
||||
logger.debug(f"[Storage] _save: {name} → {tenant_aware_name} (DB will store: {name})")
|
||||
logger.info(f"[Storage] _save: {name} → {tenant_aware_name} (DB will store: {name})")
|
||||
|
||||
# Сохраняем файл на диск с tenant_id, но возвращаем исходный путь для БД
|
||||
super()._save(tenant_aware_name, content)
|
||||
try:
|
||||
# Сохраняем файл на диск с tenant_id, но возвращаем исходный путь для БД
|
||||
# Django FileSystemStorage автоматически создаст директории если их нет
|
||||
saved_path = super()._save(tenant_aware_name, content)
|
||||
logger.info(f"[Storage] File saved successfully: {saved_path}")
|
||||
except Exception as e:
|
||||
logger.error(f"[Storage] Error saving file {tenant_aware_name}: {str(e)}", exc_info=True)
|
||||
raise
|
||||
|
||||
# Возвращаем путь БЕЗ tenant_id для сохранения в БД
|
||||
# Это позволяет:
|
||||
@@ -181,6 +187,7 @@ class TenantAwareFileSystemStorage(FileSystemStorage):
|
||||
"""
|
||||
# Получаем tenant_id
|
||||
tenant_id = self._get_tenant_id()
|
||||
logger.info(f"[Storage] exists called: name={name}, tenant_id={tenant_id}, schema={connection.schema_name}")
|
||||
|
||||
# Если путь уже содержит tenants/, не добавляем еще раз
|
||||
if name.startswith("tenants/"):
|
||||
@@ -191,11 +198,15 @@ class TenantAwareFileSystemStorage(FileSystemStorage):
|
||||
f"Current tenant: {tenant_id}, file: {name}"
|
||||
)
|
||||
return False
|
||||
return super().exists(name)
|
||||
result = super().exists(name)
|
||||
logger.info(f"[Storage] exists (with tenant): {name} → {result}")
|
||||
return result
|
||||
|
||||
# Иначе добавляем tenant_id
|
||||
tenant_aware_name = self._get_tenant_path(name)
|
||||
return super().exists(tenant_aware_name)
|
||||
result = super().exists(tenant_aware_name)
|
||||
logger.info(f"[Storage] exists: {name} → {tenant_aware_name} → {result}")
|
||||
return result
|
||||
|
||||
def url(self, name):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user