আমি আমার প্রকল্প চালু করতে প্রস্তুত থাকার কাছাকাছি। লঞ্চের পরে আমার বড় পরিকল্পনা রয়েছে এবং ডাটাবেস কাঠামোটি পরিবর্তন হতে চলেছে - বিদ্যমান সারণীতে নতুন কলাম পাশাপাশি নতুন টেবিলগুলি এবং বিদ্যমান এবং নতুন মডেলগুলিতে নতুন অ্যাসোসিয়েশন।
আমি সিকিলাইজে মাইগ্রেশনগুলি এখনও স্পর্শ করতে পারি নি, যেহেতু আমার কাছে কেবলমাত্র পরীক্ষার ডেটা ছিল যা প্রতিবার ডাটাবেস পরিবর্তনের সময় মুছে ফেলার বিষয়ে আমার আপত্তি নেই।
সে লক্ষ্যে, বর্তমানে আমি sync force: true
যখন আমার অ্যাপ্লিকেশনটি শুরু হবে তখন আমি চালাচ্ছি , যদি আমি মডেল সংজ্ঞাগুলি পরিবর্তন করে থাকি। এটি সমস্ত সারণী মুছে ফেলে এবং এগুলি স্ক্র্যাচ থেকে তৈরি করে। force
এটি কেবলমাত্র নতুন টেবিল তৈরি করার বিকল্পটি আমি বাদ দিতে পারি । তবে বিদ্যমানগুলি যদি পরিবর্তিত হয় তবে এটি কার্যকর নয়।
সুতরাং একবার আমি মাইগ্রেশনগুলিতে যুক্ত করব কীভাবে জিনিসগুলি কাজ করে? স্পষ্টতই আমি চাই না যে বিদ্যমান সারণীগুলি (এতে থাকা ডেটা সহ) মুছে ফেলা হোক, তাই sync force: true
প্রশ্ন থেকে যায়। অন্যান্য অ্যাপ্লিকেশনগুলিতে আমি অ্যাপ্লিকেশনটির মোতায়েনের প্রক্রিয়াটির অংশ হিসাবে (লারাভেল এবং অন্যান্য ফ্রেমওয়ার্ক) বিকাশে সহায়তা করেছি আমরা কোনও মুলতুবি থাকা মাইগ্রেশন চালাতে মাইগ্রেট কমান্ডটি চালাই। তবে এই অ্যাপ্লিকেশনগুলিতে খুব প্রথম মাইগ্রেশনের একটি কঙ্কাল ডাটাবেস রয়েছে, যেখানে ডেটাবেসটি সেই রাজ্যের ডেটাবেস যেখানে এটি কিছুটা আগে বিকাশের প্রথম দিকে ছিল - প্রথম আলফা প্রকাশ বা যা-ই হোক না কেন। এমনকি পার্টিতে দেরি হয়ে যাওয়া অ্যাপ্লিকেশনটির একটি উদাহরণও একসাথে সমস্ত মাইগ্রেশনকে ক্রমানুসারে চালিয়ে এক সাথে গতি পেতে পারে।
সিক্যুইলাইজে কীভাবে আমি এই জাতীয় "প্রথম স্থানান্তর" তৈরি করব? যদি আমার কাছে এটি না থাকে তবে লাইনের একদম নিচে অ্যাপ্লিকেশনটির নতুন উদাহরণটিতে মাইগ্রেশন চালুর জন্য কোনও কঙ্কাল ডাটাবেস থাকবে না, বা এটি শুরুতে সিঙ্কটি চলবে এবং সমস্ত দিয়ে ডেটাবেসকে নতুন অবস্থায় তৈরি করবে নতুন টেবিল ইত্যাদি, কিন্তু তারপরে যখন এটি মাইগ্রেশনগুলি চালানোর চেষ্টা করে তখন সেগুলি বোধগম্য হবে না, যেহেতু সেগুলি মূল ডাটাবেস এবং প্রতিটি ক্রমাগত পুনরাবৃত্তির কথা মাথায় রেখে লেখা হয়েছিল।
আমার চিন্তা প্রক্রিয়া: প্রতিটি পর্যায়ে, প্রাথমিক ডাটাবেস প্লাস প্রতিটি মাইগ্রেশন ক্রম অনুসারে ডাটাবেস উত্পন্ন যখন (প্লাস বা বিয়োগ ডেটা) হতে হবে sync force: true
চালানো হয় কোডের মডেল বিবরণে ডাটাবেস কাঠামো বর্ণনা করা হয় কারণ এটি। সুতরাং কোনও মাইগ্রেশন টেবিল না থাকলে আমরা কেবল সিঙ্ক চালাই এবং সমস্ত স্থানান্তর চালিত না হওয়া সত্ত্বেও চিহ্নিত করে রাখি they এটিই আমার কী করা উচিত (কীভাবে?), বা সিকিলাইজ নিজেই এটি করার কথা বলেছে, বা আমি ভুল গাছটি ছাঁটাই করছি? এবং যদি আমি সঠিক অঞ্চলে থাকি তবে অবশ্যই পুরানো মডেলগুলি (কমিট হ্যাশ দ্বারা? বা প্রতিটি স্থানান্তরকে একটি প্রতিশ্রুতিবদ্ধভাবে আবদ্ধ করা যেতে পারে?) দেওয়া সত্ত্বেও বেশিরভাগ স্থানান্তরকে স্বয়ংক্রিয়ভাবে উত্পন্ন করার একটি দুর্দান্ত উপায় থাকা উচিত? আমি স্বীকার করি আমি ভাবছি অ-বহনযোগ্য গিট-কেন্দ্রিক মহাবিশ্বে) এবং নতুন মডেলগুলি। এটি কাঠামোটির পার্থক্য করতে পারে এবং ডাটাবেসটিকে পুরানো থেকে নতুন, এবং পিছনে রূপান্তর করতে প্রয়োজনীয় কমান্ড তৈরি করতে পারে এবং তারপরে বিকাশকারী প্রবেশ করতে এবং প্রয়োজনীয় কোনও টুইট তৈরি করতে (নির্দিষ্ট ডেটা মোছা / স্থানান্তরকরণ) করতে পারে।
--init
কমান্ডটি দিয়ে সিক্যুয়ালাইজ বাইনারি চালানোর সময় এটি আমাকে একটি খালি মাইগ্রেশন ডিরেক্টরি দেয়। তারপরে আমি যখন sequelize --migrate
এটি চালনা করি এটি আমাকে একটি সিক্যুইলাইজমেটা টেবিল তৈরি করে যাতে কিছুই নেই, অন্য কোনও টেবিল নেই। স্পষ্টতই নয়, কারণ এই বাইনারি আমার অ্যাপ্লিকেশনটি বুটস্ট্রেপ করতে এবং মডেলগুলি লোড করতে জানে না।
আমি নিশ্চিত কিছু একটা ভুলে যাচ্ছি।
টিএলডিআর: আমি কীভাবে আমার অ্যাপ্লিকেশন এবং এর স্থানান্তরগুলি সেট আপ করব যাতে লাইভ অ্যাপ্লিকেশনটির বিভিন্ন ঘটনা আধুনিকীকরণ করা যায়, তেমনি কোনও ব্র্যান্ডস নতুন অ্যাপ্লিকেশনও নেই যা কোনও উত্তরাধিকার সূচনা হয় না?
sync
আপাতত ব্যবহার করছেন, ধারণাটি হ'ল মাইগ্রেশনগুলি পুরো ডাটাবেসটি "উত্পন্ন" করে, সুতরাং একটি কঙ্কালের উপর নির্ভর করা নিজেই একটি সমস্যা। উদাহরণস্বরূপ, রেল অন রেল ওয়ার্কফ্লো, সব কিছুর জন্য মাইগ্রেশন ব্যবহার করে এবং এটি ব্যবহার করার পরে এটি দুর্দান্ত। সম্পাদনা: এবং হ্যাঁ, আমি লক্ষ্য করেছি যে এই প্রশ্নটি বেশ পুরানো, তবে এর আগে কখনও সন্তোষজনক উত্তর পাওয়া যায় নি এবং লোকেরা এখানে গাইডেন্স খুঁজতে চাইতে পারে, আমি বুঝতে পেরেছিলাম যে আমার অবদান রাখতে হবে।