2026-06-11 10:41:55 +03:30
|
|
|
|
# چکلیست Deploy — برنچ ماژولار
|
|
|
|
|
|
|
2026-06-11 19:23:16 +03:30
|
|
|
|
> **ایمنی:** `php artisan migrate` دیگر `mysql-schema.sql` را auto-load نمیکند (DROP TABLE نمیزند).
|
|
|
|
|
|
> فایل schema فقط دستی: `database/schema/mysql-schema.sql.reference`
|
|
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
## قبل از شروع
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] بکاپ DB
|
|
|
|
|
|
- [ ] کد + SQLهای جدید روی سرور (`baseline_migrations.sql` حتماً نسخه جدید — **۱۱ ردیف**)
|
|
|
|
|
|
- [ ] `database/migrations/` فقط ۸ فایل `2026_*`
|
|
|
|
|
|
- [ ] `php artisan config:clear`
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
## DB موجود — ترتیب
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-06-11 13:22:30 +03:30
|
|
|
|
cd /opt/PROJECT/server
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
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"')
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
# ۱ baseline
|
|
|
|
|
|
mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USERNAME" -p"$DB_PASSWORD" "$DB_DATABASE" \
|
2026-06-11 10:41:55 +03:30
|
|
|
|
< database/sql/baseline_migrations.sql
|
2026-06-11 13:59:28 +03:30
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
# باید ۱۱ ردیف چاپ شود (شامل 2019 و 2021)
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
# ۲ چک 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%';"
|
2026-06-11 13:59:28 +03:30
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
# باید: 2
|
|
|
|
|
|
|
|
|
|
|
|
# ۳ status — ۱۰ تا همه Yes
|
2026-06-11 10:41:55 +03:30
|
|
|
|
php artisan migrate:status
|
2026-06-11 13:22:30 +03:30
|
|
|
|
|
2026-08-19 19:55:29 +03:30
|
|
|
|
# ۴ migrate + ۵ settings (یک دستور)
|
|
|
|
|
|
php artisan deploy:tenant
|
2026-06-11 10:41:55 +03:30
|
|
|
|
```
|
|
|
|
|
|
|
2026-08-19 19:55:29 +03:30
|
|
|
|
**یا جدا:** `php artisan migrate --force` سپس `php artisan settings:deploy`
|
|
|
|
|
|
|
|
|
|
|
|
**یا:** `bash database/sql/run_deploy_tenant.sh`
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
### چک بعد از مرحله ۲
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
| خروجی `migrate:status` | کار |
|
|
|
|
|
|
|------------------------|-----|
|
|
|
|
|
|
| ۱۰ تا همه **Yes** | ادامه مرحله ۴ |
|
|
|
|
|
|
| `2019`/`2021` هنوز **No** | `fake_package_migrations.sql` بزن → دوباره status |
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-06-11 13:22:30 +03:30
|
|
|
|
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
|
2026-06-11 10:41:55 +03:30
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
## soroushgold — الان (بعد از خطا)
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-06-11 13:22:30 +03:30
|
|
|
|
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
|
|
|
|
|
|
|
2026-08-19 19:55:29 +03:30
|
|
|
|
php artisan settings:deploy
|
2026-06-11 13:22:30 +03:30
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## DB خالی
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-06-11 19:23:16 +03:30
|
|
|
|
mysql ... < database/schema/mysql-schema.sql.reference
|
|
|
|
|
|
mysql ... < database/sql/baseline_migrations.sql
|
2026-06-11 13:22:30 +03:30
|
|
|
|
php artisan migrate
|
2026-08-19 19:55:29 +03:30
|
|
|
|
php artisan settings:deploy
|
2026-06-11 10:41:55 +03:30
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
## خطاها
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
| خطا | فیکس |
|
|
|
|
|
|
|-----|------|
|
|
|
|
|
|
| `Table already exists` | `fake_package_migrations.sql` → `migrate` |
|
2026-06-11 19:23:16 +03:30
|
|
|
|
| `Loading stored database schema` | کد قدیمی — `git pull` (دیگر رخ نمیدهد). اگر شد: restore بکاپ |
|
2026-06-11 13:22:30 +03:30
|
|
|
|
| `2019`/`2021` No بعد از baseline | baseline قدیمی → `fake_package_migrations.sql` |
|
|
|
|
|
|
| `Unknown host HOST` | از `.env` بخوان نه placeholder |
|
2026-07-08 17:13:04 +03:30
|
|
|
|
| `Unknown column 'total_referrals'` | `git pull` + `php artisan migrate` (ensure_total_referrals) |
|
|
|
|
|
|
| `Unknown column 'order_limit_enabled'` / محدودیت سفارش ذخیره نمیشود | `git pull` + `php artisan migrate` (ensure_products_baseline_columns) |
|
2026-07-14 22:03:39 +03:30
|
|
|
|
| `Unknown column 'product_id'` روی `wallets` / `/customer/me` | `mysql ... < database/sql/gholaktala_upgrade.sql` سپس merge settings |
|
|
|
|
|
|
| upgrade کامل قلک طلا | `bash database/sql/run_gholaktala_upgrade.sh` |
|
2026-07-08 17:13:04 +03:30
|
|
|
|
| `Nothing to migrate` ولی ستون نیست | baseline فقط در جدول migrations ثبت کرده — migrationهای `ensure_*` را deploy و `migrate` بزنید |
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
## فایلها
|
2026-06-11 10:41:55 +03:30
|
|
|
|
|
|
|
|
|
|
| فایل | کار |
|
|
|
|
|
|
|------|-----|
|
2026-06-11 13:22:30 +03:30
|
|
|
|
| `baseline_migrations.sql` | ۱۱ migration یکجا |
|
|
|
|
|
|
| `fake_package_migrations.sql` | فقط 2019 + 2021 |
|
|
|
|
|
|
| `deploy_settings_const.sql` | settings + const |
|
2026-07-14 22:03:39 +03:30
|
|
|
|
| `ensure_wallet_module_columns.sql` | `wallets.product_id` + ستونهای transactions برای DB قدیمی |
|
|
|
|
|
|
| `deploy_safe_schema.sql` | ALTERهای idempotent (شامل wallets.product_id) |
|
2026-06-11 13:22:30 +03:30
|
|
|
|
| `fix_migrations_after_failed_migrate.sql` | reset کامل migrations |
|
|
|
|
|
|
| `run_deploy_existing_db.sh` | اجرای خودکار + چک |
|
2026-07-14 22:03:39 +03:30
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## فوری — gholaktala /customer/me شکسته
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
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
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
چک:
|
|
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
SHOW COLUMNS FROM wallets LIKE 'product_id';
|
|
|
|
|
|
-- باید یک ردیف برگردد
|
|
|
|
|
|
```
|