Worker Previews کلادفلیر: هر برنچ، یه محیط جدا
خلاصهٔ کاملتر
با دستور npx wrangler preview هر برنچ گیت یه محیط ایزوله و یه آدرس ثابت خودش میگیره و هر push همون Preview رو بهروز میکنه. تو پست اومده که میشه صدها Preview رو همزمان بالا داشت بدون اینکه رو همدیگه یا رو production اثر بذارن. فرقش با Wrangler environments اینه که اونجا هر محیط یه Worker جدا بود که باید جدا دیپلوی و مدیریت میشد، ولی اینجا همه زیر یه Worker و تو یه نمای داشبورد جمعن.
مهمترین تیکه فنی، استیته. Durable Objectها مدل singleton دارن، یعنی برای هر شناسه فقط یه نمونه مسئوله و استوریج مال خودشه. اگه Preview همون namespace تولید رو استفاده میکرد، فقط داده قدیمی نمیخوندی، میتونستی همون نمونهای که داره به ترافیک واقعی سرویس میده رو عوض کنی. برای همین هر بار که preview میزنی، کلادفلیر یه Durable Object namespace و یه Container application تازه برای همون برنچ میسازه.
کاری که تو کد لازمه اینه که کلاس رو export کنی، migrationشو بذاری و از ctx.exports بهش برسی:
export class Counter extends DurableObject {}
export default {
async fetch(request, env, ctx) {
const id = ctx.exports.Counter.idFromName("demo");
const counter = ctx.exports.Counter.get(id);
return counter.fetch(request);
},
};تو production این ctx.exports.Counter به namespace تولید وصل میشه و تو Preview به namespace همون برنچ. یعنی یه migration خراب یا تغییر اشتباه اسکیما فقط تو همون برنچ میمونه.
کنار هر Preview همون ابزارهای Workers Observability همیشگی هم هست: رویدادها، خطاها، متریک و تریس، ولی محدود به همون Preview. تیم کلادفلیر میگه خودش داره با همین قابلیت CloudflareOS رو میسازه و تست میکنه، چون بعضی باگها فقط وقتی OAuth callback و مجوزها و جریان تأیید با هم اجرا میشن خودشونو نشون میدن.
کانفیگ پایه رو یه بار تو بلاک previews فایل Wrangler مینویسی، مثلاً یه باکت R2 استیجینگ بهجای باکت production، و بعد هر Preview میتونه فقط مال خودشو override کنه بدون دست زدن به production یا بقیه. آدرسها میتونن روی دامنه خودت باشن و با Cloudflare Access پشت لاگین قفل بشن. اون preview URLهای قبلی هم حالا اسمشون شده Version URL، چون به یه نسخه آپلودشده اشاره میکنن نه به یه محیط جدا.
نکات کلیدی:
- npx wrangler preview برای هر برنچ گیت یه Preview با آدرس ثابت میسازه
- هر Preview یه Durable Object namespace و Container application جدا میگیره
- کانفیگ پایه تو بلاک previews فایل Wrangler تعریف میشه و هر Preview میتونه override کنه
- preview URLهای قدیمی حالا Version URL نامیده میشن و محیط جدا نمیسازن
- هنوز service binding از Preview به production وصل میشه و مصرف Queue داخل Preview پشتیبانی نمیشه




