diff --git a/.gitignore b/.gitignore index 498fc90..eeba69c 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ data/textbooks/* # کلیدِ امضای تولیدشده‌ی خودکار (هرگز کامیت نشود) .django_secret_key + +# خروجیِ collectstatic — تولیدی است، در هر دیپلوی از نو ساخته می‌شود. +staticfiles/ diff --git a/deploy.sh b/deploy.sh index 205ed0a..cff046f 100755 --- a/deploy.sh +++ b/deploy.sh @@ -125,21 +125,20 @@ python manage.py seed_content 2>&1 | sed 's/^/ /' \ || warn "seed_content شکست خورد؛ کد به‌روز شد ولی محتوا دست‌نخورده ماند." # ─── ۵. فایل‌های استاتیک ─────────────────────────────────────────────────── -# فقط در حالتِ پروداکشن لازم است: با DEBUG=1 خودِ whitenoise از finders می‌خواند. +# بی‌قید و شرط اجرا می‌شود، حتی وقتی DEBUG روشن است. +# +# قبلاً این مرحله وقتی DEBUG=1 بود رد می‌شد، چون در آن حالت whitenoise از +# finders می‌خواند و جمع‌آوری لازم نبود. ولی این یعنی درستیِ دیپلوی به +# ترتیبِ کارهای یک آدم گره می‌خورد: اگر کسی با DEBUG روشن دیپلوی کند و بعد +# DEBUG را خاموش کند، جنگو دنبالِ فایل‌هایی می‌گردد که هیچ‌وقت جمع نشدند و +# پنلِ ادمین بدونِ CSS بالا می‌آید — بدونِ هیچ خطایی در لاگ. دقیقاً همین +# روی سرور اتفاق افتاد. +# +# هزینه‌اش چند ثانیه است و idempotent هم هست، پس همیشه اجرا می‌شود. step "جمع‌آوریِ فایل‌های استاتیک" -if python -c " -import django, os -os.environ.setdefault('DJANGO_SETTINGS_MODULE','config.settings') -django.setup() -from django.conf import settings -raise SystemExit(0 if settings.DEBUG else 1) -" 2>/dev/null; then - printf ' DEBUG روشن است — لازم نیست.\n' -else - python manage.py collectstatic --noinput >/dev/null \ - || warn "collectstatic شکست خورد؛ پنلِ ادمین ممکن است بدونِ CSS بالا بیاید." - printf ' انجام شد.\n' -fi +python manage.py collectstatic --noinput >/dev/null \ + || warn "collectstatic شکست خورد؛ پنلِ ادمین ممکن است بدونِ CSS بالا بیاید." +printf ' انجام شد.\n' # ─── ۶. بررسی‌های پیش از راه‌اندازی ──────────────────────────────────────── step "بررسیِ تنظیماتِ استقرار"