منتجك على Replit، والعملاء يسجّلون ويرفعون صور، وكل شي تمام. تعدّل شي صغير وتسوي نشر جديد، فتلقى الطلبات اختفت، أو الحسابات، أو الصور المرفوعة صارت روابط مكسورة. ما فيه رسالة خطأ واضحة هنا، وهذا اللي يخليها خطيرة: البيانات تروح بصمت.
ليش تختفي
النشر في Replit ياخذ نسخة من ملفات منتجك ويشغّلها على سيرفر. هذا السيرفر ما يحفظ الملفات اللي تنكتب وقت التشغيل: أي ملف ينحفظ على القرص بعد ما يبدأ المنتج، يروح مع أول نشر جديد. هذا موثّق عند Replit، ونفس الشي في أغلب الاستضافات الحديثة.
فإذا منتجك يحفظ البيانات في ملف، تختفي. وأشهر الحالات:
- قاعدة SQLite: قاعدة بيانات كاملة في ملف واحد داخل المشروع، مثل
database.db. أدوات الذكاء الاصطناعي تختارها لأنها ما تحتاج إعداد. في التجربة ممتازة، وفي النشر كل نشر جديد يرجّعها للنسخة اللي كانت وقت البناء. - ملف JSON كقاعدة بيانات: الكود يكتب الطلبات أو المستخدمين في ملف
data.json. - الصور والملفات المرفوعة تنحفظ في مجلد مثل
uploadsداخل المشروع. - قاعدة التجربة وقاعدة الإنتاج: تكون تشتغل وتضيف بيانات في بيئة التطوير، والمنتج المنشور يتصل بقاعدة ثانية، أو العكس. فتظن إن البيانات اختفت، وهي في مكان ثاني.
كيف تتأكد بنفسك
- في ملفات المشروع ابحث عن ملفات تنتهي بـ
.dbأو.sqliteأو.jsonفيها بيانات عملاء، وعن مجلدuploadsأو مشابه. - ابحث في الكود عن
sqliteوwriteFileوfs.. أي كود يكتب بيانات عملاء في ملف، بياناته في خطر. - شوف إعدادات النشر: وين يتصل المنتج المنشور بقاعدة البيانات؟ نفس القاعدة اللي تشوفها وأنت تطوّر؟
- اختبار مباشر على نسخة تجريبية: أضف سطر أو ارفع صورة، وسوّ نشر جديد، وشوف إذا لسا موجودة.
إذا اختفت فعلًا
- وقّف النشرات الجديدة حتى تفهم وين البيانات، عشان ما تمسح نسخة باقية.
- شوف إذا عند Replit نسخ أو سجل للنشرات السابقة تقدر ترجع منها.
- إذا العملاء دفعوا، بوابة الدفع عندها سجل بكل عملية، ومنه تقدر تعيد بناء الطلبات المدفوعة على الأقل.
- إذا البيانات فيها معلومات شخصية وضاعت أو ما تدري وين صارت، هذا يمس التزاماتك في نظام حماية البيانات الشخصية.
الحل اللي لا تسويه
- رفع ملف قاعدة البيانات مع الكود عشان «يبقى». كل نشر يرجّع نفس النسخة القديمة ويمسح الجديد، وبيانات عملائك تصير داخل الكود عند أي أحد يشوفه.
- عدم النشر أبدًا والشغل على النسخة الحية. أول نشر تضطر له، لإصلاح عاجل مثلًا، يمسح نفس الشي.
- تشغيل المنتج من بيئة التطوير كأنها الإنتاج، عشان الملفات تبقى. هذي ما صُممت لعملاء حقيقيين.
الحل الصح
- قاعدة بيانات حقيقية منفصلة عن الكود: PostgreSQL، سواء اللي يقدّمها Replit نفسه، أو Supabase، أو Neon. البيانات تعيش هناك، والنشر يغيّر الكود فقط.
- تخزين ملفات منفصل للصور والمرفقات: مثل App Storage في Replit، واسمه كان Object Storage، أو Supabase Storage، أو S3.
- نقل البيانات الموجودة من الملف للقاعدة الجديدة قبل أي نشر جاي.
- نسخ احتياطية تتجرّب. الطريقة في نسختك الاحتياطية شغّالة فعلًا؟.
وفيه مشاكل ثانية نشوفها في المنتجات على هالمنصة في مشاكل Replit الأشهر.
تبي أحد ينقلها معك؟
نقل البيانات من ملف لقاعدة حقيقية بدون ما يضيع شي يستاهل يتسوّى مرة وحدة صح. الإصلاح المباشر ينقلها ويثبّت مكانها، أو ابدأ بـ مكالمة استشارية نشوف فيها وين بياناتك الحين بالضبط.