Force can_edit=1 for Montzar/price runtime keys via settings:deploy and settings:sync-runtime-can-edit, so tenant DB stays correct even when an older deploy SQL is still on the server. Co-authored-by: Cursor <cursoragent@cursor.com>
5.3 KiB
5.3 KiB
چکلیست 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_* هنوز can_edit=0 در Navicat |
git pull روی server سپس php artisan deploy:tenant — باید runtime can_edit sync و montzar_token=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';
-- باید یک ردیف برگردد