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:
2025-12-21 16:54:44 +03:00
parent a55be3095b
commit 812ecb53e6
7 changed files with 241 additions and 20 deletions

View File

@@ -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):
"""