66 lines
1.8 KiB
Plaintext
66 lines
1.8 KiB
Plaintext
# Cleanup Commands for Stuck Celery Tasks
|
|
|
|
## Quick Commands
|
|
|
|
### 1. Restart Celery Worker (to apply code changes)
|
|
```bash
|
|
docker restart mix_celery_worker
|
|
docker logs -f --tail 50 mix_celery_worker
|
|
```
|
|
|
|
### 2. Run Cleanup Script (Interactive)
|
|
```bash
|
|
# Copy script to container
|
|
docker cp cleanup_stuck_photos.py mix_web:/app/
|
|
|
|
# Run interactively
|
|
docker exec -it mix_web python manage.py shell
|
|
>>> exec(open('cleanup_stuck_photos.py').read())
|
|
```
|
|
|
|
### 3. Manual Cleanup (Django Shell)
|
|
```bash
|
|
docker exec -it mix_web python manage.py shell
|
|
```
|
|
|
|
Then run:
|
|
```python
|
|
from django.db import connection
|
|
from products.models import ProductPhoto, PhotoProcessingStatus
|
|
from django.core.files.storage import default_storage
|
|
|
|
# Activate schema
|
|
connection.set_schema('mixflowers')
|
|
|
|
# Find photo #6
|
|
photo = ProductPhoto.objects.get(id=6)
|
|
print(f"Photo: {photo}")
|
|
print(f"File path: {photo.image.name}")
|
|
print(f"File exists: {default_storage.exists(photo.image.name)}")
|
|
|
|
# Option 1: Delete the record
|
|
photo.delete()
|
|
|
|
# Option 2: Clear the image field (keep record)
|
|
# photo.image = None
|
|
# photo.save()
|
|
|
|
# Clean up stuck processing statuses
|
|
stuck = PhotoProcessingStatus.objects.filter(status__in=['pending', 'processing'])
|
|
print(f"Found {stuck.count()} stuck statuses")
|
|
stuck.update(status='failed', error_message='File was deleted before processing')
|
|
```
|
|
|
|
## What Was Fixed
|
|
|
|
1. **FileNotFoundError handling**: Task now fails immediately instead of retrying when file is missing
|
|
2. **File existence check**: Added check before processing to catch missing files early
|
|
3. **Status updates**: PhotoProcessingStatus is properly updated to 'failed' when file not found
|
|
|
|
## Testing
|
|
|
|
After restarting Celery worker:
|
|
1. Upload a new photo - should process normally
|
|
2. Check logs - should not see retry loops for missing files
|
|
3. Verify stuck tasks are cleaned up
|