رولبک (Rollback) به بازگرداندن عملیات یا وضعیت به مرحله قبلی گفته میشود، اما معنا در ترنزکشن دیتابیس، مایگریشن و دپلوی یکسان نیست. یک Rollback تراکنش تغییرات ثبتنشده را لغو میکند. Rollback مایگریشن دستورهای Down تعریفشده را اجرا میکند و Rollback دپلوی نسخه برنامه را به Release قبلی برمیگرداند.
رولبک تراکنش در SQL
START TRANSACTION;
UPDATE products SET price = price * 1.10 WHERE id = 42;
-- On validation failure:
ROLLBACK;
رولبک مایگریشن در فریمورکهای مختلف
| فریمورک | دستور نمونه | نکته |
|---|---|---|
| Laravel | php artisan migrate:rollback --step=1 | یک Batch یا تعداد Step انتخابی |
| Yii 2 | php yii migrate/down 1 | در نسخه ۲ سینتکس migrate/down |
| Yii 3 | ./yii migrate:down --limit=1 | در قالب دارای yiisoft/db-migration |
| Django | python manage.py migrate shop 0002 | بازگشت اپ shop به Migration شماره 0002 |
| Symfony / Doctrine | php bin/console doctrine:migrations:execute --down VERSION | نام دقیق VERSION و پشتیبانی Down باید بررسی شود |
| ASP.NET Core / EF Core | dotnet ef database update PreviousMigration | دیتابیس به نسخه Migration قبلی بازمیگردد |
// Laravel migration
public function up(): void {
Schema::table('orders', fn (Blueprint $table) =>
$table->string('tracking_code')->nullable());
}
public function down(): void {
Schema::table('orders', fn (Blueprint $table) =>
$table->dropColumn('tracking_code'));
}
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [("shop", "0002_previous")]
operations = [
migrations.AddField(
model_name="order", name="tracking_code",
field=models.CharField(max_length=40, null=True),
)
]
رولبک دپلوی
kubectl rollout undo deployment/shop-api
# Or switch your release symlink / deployment target to a previous artifact.
هشدار مهم
همه مایگریشنها برگشتپذیر نیستند. اگر ستون را همراه با داده حذف کرده باشید، Down نمیتواند خودکار داده را بازسازی کند. برای Production از تغییرات Expand / Contract، Backup و آزمایش بازگشت استفاده کنید.
مطالعه مایگریشن، ترنزکشن و مقاله استراتژیهای دپلوی در باورژن مفید است.