Files
boursecu_server/database/sql/DEPLOY_CHECKLIST.md
T
2026-08-26 12:56:57 +03:30

5.5 KiB
Raw Blame History

چک‌لیست Deploy — برنچ ماژولار

ایمنی: php artisan migrate دیگر mysql-schema.sql را auto-load نمی‌کند (DROP TABLE نمی‌زند).
فایل schema فقط دستی: database/schema/mysql-schema.sql.reference

قبل از شروع

  • بکاپ DB
  • کد + SQLهای جدید روی سرور (baseline_migrations.sql حتماً نسخه جدید — ۱۱ ردیف)
  • database/migrations/ فقط ۸ فایل 2026_*
  • php artisan config:clear

DB موجود — ترتیب

cd /opt/PROJECT/server

DB_HOST=$(grep ^DB_HOST= .env | cut -d= -f2- | tr -d '\r"')
DB_PORT=$(grep ^DB_PORT= .env | cut -d= -f2- | tr -d '\r"')
DB_DATABASE=$(grep ^DB_DATABASE= .env | cut -d= -f2- | tr -d '\r"')
DB_USERNAME=$(grep ^DB_USERNAME= .env | cut -d= -f2- | tr -d '\r"')
DB_PASSWORD=$(grep ^DB_PASSWORD= .env | cut -d= -f2- | tr -d '\r"')

# ۱ baseline
mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USERNAME" -p"$DB_PASSWORD" "$DB_DATABASE" \
  < database/sql/baseline_migrations.sql

# باید ۱۱ ردیف چاپ شود (شامل 2019 و 2021)

# ۲ چک DB — اگر کمتر از ۲ بود baseline قدیمی است
mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USERNAME" -p"$DB_PASSWORD" "$DB_DATABASE" -N -e \
  "SELECT COUNT(*) FROM migrations WHERE migration LIKE '2019%' OR migration LIKE '2021%';"

# باید: 2

# ۳ status — ۱۰ تا همه Yes
php artisan migrate:status

# ۴ migrate + ۵ settings (یک دستور)
php artisan deploy:tenant

یا جدا: php artisan migrate --force سپس php artisan settings:deploy

یا: bash database/sql/run_deploy_tenant.sh

چک بعد از مرحله ۲

خروجی migrate:status کار
۱۰ تا همه Yes ادامه مرحله ۴
2019/2021 هنوز No fake_package_migrations.sql بزن → دوباره status
mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USERNAME" -p"$DB_PASSWORD" "$DB_DATABASE" \
  < database/sql/fake_package_migrations.sql
php artisan migrate:status
php artisan migrate

soroushgold — الان (بعد از خطا)

cd /opt/soroushgold/server

mysql -h 127.0.0.1 -P 3030 -u root -p soroushgold \
  < database/sql/fake_package_migrations.sql

php artisan migrate:status
php artisan migrate

php artisan settings:deploy

DB خالی

mysql ... < database/schema/mysql-schema.sql.reference
mysql ... < database/sql/baseline_migrations.sql
php artisan migrate
php artisan settings:deploy

خطاها

خطا فیکس
Table already exists fake_package_migrations.sql → migrate
Loading stored database schema کد قدیمی — git pull (دیگر رخ نمی‌دهد). اگر شد: restore بکاپ
2019/2021 No بعد از baseline baseline قدیمی → fake_package_migrations.sql
Unknown host HOST از .env بخوان نه placeholder
Unknown column 'total_referrals' git pull + php artisan migrate (ensure_total_referrals)
montzar_token / price_provider هنوز can_edit=1 در Navicat git pull روی server سپس php artisan deploy:tenant (یا چند DB: php artisan settings:deploy db1 db2 …) — باید can_edit sync و price_provider=0 چاپ شود
chart_use_local_data در تنظیمات پیشرفته است همان deploy — باید chart_use_local_data=1 و فقط در تنظیمات عادی باشد
گروه Montzar در تنظیمات عادی نیست git pull + build ادمین (ed326a4+) + price_provider=montzar در سوپرادمین
کلید runtime در سوپرادمین نیست (عمدی) API 19d28f2+ + npm run replicas:sync؛ web سوپرادمین هم git pull + build
Unknown column 'order_limit_enabled' / محدودیت سفارش ذخیره نمی‌شود git pull + php artisan migrate (ensure_products_baseline_columns)
Unknown column 'product_id' روی wallets / /customer/me mysql ... < database/sql/gholaktala_upgrade.sql سپس merge settings
upgrade کامل قلک طلا bash database/sql/run_gholaktala_upgrade.sh
Nothing to migrate ولی ستون نیست baseline فقط در جدول migrations ثبت کرده — migrationهای ensure_* را deploy و migrate بزنید

فایل‌ها

فایل کار
baseline_migrations.sql ۱۱ migration یکجا
fake_package_migrations.sql فقط 2019 + 2021
deploy_settings_const.sql settings + const
ensure_wallet_module_columns.sql wallets.product_id + ستون‌های transactions برای DB قدیمی
deploy_safe_schema.sql ALTERهای idempotent (شامل wallets.product_id)
fix_migrations_after_failed_migrate.sql reset کامل migrations
run_deploy_existing_db.sh اجرای خودکار + چک

فوری — gholaktala /customer/me شکسته

cd /opt/gholak/server   # یا مسیر واقعی پروژه

# بکاپ
mysqldump -h ... -u ... -p DB_NAME > /tmp/gholak_before_wallet_cols.sql

# فقط ستون‌های گم‌شده (داده موجود دست نخورده؛ product_id=NULL = کیف اصلی قدیم)
mysql -h ... -u ... -p DB_NAME < database/sql/ensure_wallet_module_columns.sql

php artisan migrate   # ثبت مایگریشن ensure_wallet_module_columns
php artisan config:clear

چک:

SHOW COLUMNS FROM wallets LIKE 'product_id';
-- باید یک ردیف برگردد