| set -euo pipefail | |
| log() { | |
| echo "[ENTRYPOINT] $1" | |
| } | |
| log "Boot sequence started at $(date -u +"%Y-%m-%d %H:%M:%S UTC")" | |
| # Debug installed transformers version to ensure modeling_layers exists | |
| python - <<'PY' | |
| import importlib.util, transformers | |
| print(f"[ENTRYPOINT] transformers version: {transformers.__version__}") | |
| spec = importlib.util.find_spec("transformers.modeling_layers") | |
| print(f"[ENTRYPOINT] transformers.modeling_layers available: {bool(spec)}") | |
| PY | |
| if [[ -z "${DATABASE_URL:-}" ]]; then | |
| log "DATABASE_URL is empty -> Django will fallback to POSTGRES_* or SQLite" | |
| else | |
| log "DATABASE_URL detected (length: ${#DATABASE_URL})" | |
| fi | |
| cd /app | |
| log "Running migrations..." | |
| python hue_portal/manage.py migrate --noinput | |
| log "Migrations completed." | |
| log "Ensuring cache table exists..." | |
| python hue_portal/manage.py createcachetable | |
| log "Cache table ready." | |
| # Skip model preload to prevent CPU overload (models will load lazily on first request) | |
| log "⏭️ Skipping model preload (CPU optimization - models will load on first request)" | |
| log "Starting Gunicorn on port ${PORT:-7860}..." | |
| exec gunicorn hue_portal.hue_portal.wsgi:application \ | |
| --bind 0.0.0.0:${PORT:-7860} \ | |
| --timeout 600 \ | |
| --workers 1 \ | |
| --worker-class sync | |