Laravel Schema Sentinel: تشخیص و رفع drift در دیتابیس
خلاصهٔ کاملتر
اگه تا حالا برات پیش اومده که دیتابیس production یا staging با migrationهات همخوانی نداشته باشه، میدونی چقدر این موضوع میتونه دردسرساز بشه. Laravel Schema Sentinel یه پکیج متنبازه که دقیقاً این مشکل رو حل میکنه؛ schema drift رو شناسایی میکنه و کمک میکنه که دیتابیس واقعیات همیشه با migrationهات سینک باشه.
کار اصلی این پکیج اینه که migrationهات رو روی یه shadow database موقت اجرا میکنه و بعد اون رو با دیتابیس زندهات مقایسه میکنه. این مقایسه شامل جداول، ستونها، نوع داده، nullable بودن، مقادیر پیشفرض، ایندکسها و foreign keyها میشه. برای شروع کافیه یه دستور ساده اجرا کنی:
php artisan schema:driftاگه بخوای سختگیرانهتر بررسی بشه، با فلگ --strict ستونها یا جداولی که توی دیتابیس زنده هستن ولی migration متناظری ندارن هم گزارش میشن.
وقتی drift پیدا شد، Sentinel میتونه بهصورت خودکار یه migration اصلاحی تولید کنه. با فلگ --interactive میتونی قبل از نوشتن هر چیزی، تفاوتها رو یکییکی مرور کنی. اگه هم فقط میخوای کد رو ببینی و فایلی ذخیره نشه، --sql این کار رو میکنه:
php artisan schema:drift --fix --interactiveیکی از قابلیتهای کاربردی این پکیج، مقایسه cross-environmentه. یعنی میتونی migrationهای محلیات رو با دیتابیس staging یا production مقایسه کنی، قبل از اینکه migrate رو بزنی و به مشکل بخوری:
php artisan schema:drift --compare-env=stagingاین دستور از connection تعریفشده توی config/database.php استفاده میکنه، پس نیازی به تنظیم اضافهای نیست.
برای استفاده برنامهنویسی هم یه Facade در اختیارته که نتیجه diff رو بهصورت یه DTO برمیگردونه. این خیلی به کار داشبوردهای ادمین یا کامپوننتهای Livewire میآد:
use Sentinel\SchemaSentinel\Facades\Sentinel;
$diff = Sentinel::check(strict: true);
return response()->json([
'in_sync' => !$diff->hasDifferences(),
'drift' => $diff->toArray(),
]);یه کامپوننت Livewire هم همراه پکیج میاد که میتونی مستقیم توی Blade امبدش کنی و یه داشبورد بصری برای سلامت دیتابیس داشته باشی، البته این داشبورد فقط در محیط local نمایش داده میشه.
نکته جالب دیگه اینه که Sentinel میتونه بهعنوان یه گارد قبل از migration عمل کنه و اگه drift شناسایی بشه، اجرای php artisan migrate رو بهصورت خودکار بلاک کنه تا جلوی خرابی بیشتر گرفته بشه. این پکیج لاراول ۱۱ تا ۱۳ رو پشتیبانی میکنه و روی GitHub در دسترسه.
نکات کلیدی:
- Schema drift رو با مقایسه shadow database و دیتابیس زنده شناسایی میکنه
- بررسی جامع شامل جداول، ستونها، نوع داده، ایندکس و foreign key
- قابلیت تولید migration اصلاحی بهصورت تعاملی و گامبهگام
- مقایسه cross-environment برای تطبیق local با staging یا production
- Facade برنامهنویسی برای استفاده در داشبورد و کامپوننتهای Livewire
- گارد خودکار برای بلاک کردن migrate در صورت وجود drift
- پشتیبانی از لاراول ۱۱، ۱۲ و ۱۳




