গিট শাখা এবং রেল মাইগ্রেশনগুলির সাথে কীভাবে কাজ করবেন


131

আমি বেশ কয়েকটি গিট শাখা নিয়ে একটি রেল অ্যাপে কাজ করছি এবং এর মধ্যে অনেকগুলি ডিবি মাইগ্রেশন অন্তর্ভুক্ত রয়েছে। আমরা সাবধান হওয়ার চেষ্টা করি তবে মাঝেমধ্যে মাস্টারে কিছু কোডের টুকরা একটি কলামের জন্য জিজ্ঞাসা করে যা অপর একটি শাখায় নাম / নাম বদলে যায়।

  1. ডিবি রাজ্যগুলির সাথে "দম্পতি" গিট শাখাগুলির একটি দুর্দান্ত সমাধান কী হবে?

  2. এই "রাজ্য" আসলে কি হবে?

    আমরা যদি কোনও ডাটাবেসটির আকার কয়েক জিবি হয় তবে আমরা এটির সদৃশ করতে পারি না।

  3. এবং মার্জ সঙ্গে কি ঘটতে হবে?

  4. সমাধানটিও কোনও এনএসকিউএল ডাটাবেসে অনুবাদ করবে?

    আমরা বর্তমানে মাইএসকিউএল, মঙ্গডব এবং রেডিস ব্যবহার করি


সম্পাদনা: দেখে মনে হচ্ছে যে আমি একটি খুব গুরুত্বপূর্ণ বিষয় উল্লেখ করতে ভুলে গেছি, আমি কেবলমাত্র বিকাশের পরিবেশে আগ্রহী তবে বড় ডেটাবেসগুলির সাথে (কয়েকটি গিগাবাইট আকারের)।


আপনি কী করছেন যে আপনার মাস্টার শাখা পরিচালনা করছে এমন একটি পরিবেশ রয়েছে যার ডেটাবেস অন্যান্য শাখাগুলি পরিবর্তন করতে পারে? আপনার ওয়ার্কফ্লোটি কী তা বা আপনি কেন নির্দিষ্ট ডেটাবেসের সাথে আপনার শাখাগুলি সুসংগত রাখার প্রয়োজন মনে করেন তা আমি বুঝতে পারি না।
জোনা

3
আসুন ধরা যাক আমাদের ক্লায়েন্টদের (নাম, ইমেল, ফোন) ডেটাবেজে একটি টেবিল রয়েছে এবং একটি শাখায় আমরা কলামগুলির একটির ভাগ (নাম -> প্রথম_নাম + শেষ নাম) রেখেছি। আমরা শাখাকে মাস্টারের সাথে একীভূত না করা পর্যন্ত, মাস্টার এবং এর ভিত্তিতে অন্যান্য সমস্ত শাখা ব্যর্থ হবে।
Kostas

উত্তর:


64

আপনি যখন কোনও শাখায় একটি নতুন মাইগ্রেশন যুক্ত করেন, rake db:migrateস্থানান্তর এবং পরিচালনা উভয়ই চালিত করুন এবং প্রতিশ্রুতিবদ্ধ করুন db/schema.rb

আপনি যদি এটি করেন, বিকাশে, আপনি অন্য কোনও শাখায় স্যুইচ করতে সক্ষম হবেন যা মাইগ্রেশনের একটি আলাদা সেট রয়েছে এবং কেবল রান করতে পারে rake db:schema:load

মনে রাখবেন এটি পুরো ডাটাবেসটিকে পুনরায় তৈরি করবে এবং বিদ্যমান ডেটা হারিয়ে যাবে

আপনি সম্ভবত কেবলমাত্র একটি শাখার বাইরে উত্পাদন চালাতে চাইবেন যার সাথে আপনি খুব যত্নবান হন, সুতরাং এই পদক্ষেপগুলি সেখানে প্রয়োগ হয় না (কেবল rake db:migrateসেখানে যথারীতি চালান )। তবে বিকাশে, স্কিমা থেকে ডাটাবেসটি পুনরায় তৈরি করা কোনও বড় বিষয় হওয়া উচিত নয়, যা এটিই rake db:schema:loadকরবে।


5
আমি মনে করি এটি কেবলমাত্র স্কিমা সমস্যার সমাধান করবে, প্রতি ডাউন ডাউন মাইগ্রেশন দিয়ে আর কখনও দেখা হবে না এমন তথ্য হারিয়ে যাবে। কোনও শাখা থেকে বেরিয়ে যাওয়ার সময় এবং অন্য একটি শাখায় যাওয়ার সময় লোড হয়ে যাওয়া এমন অন্য একটি ডিবি-ডেটা-প্যাচ সংরক্ষণ করা কি ভাল ধারণা হবে? প্যাচগুলিতে কেবল সেই ডেটা থাকা উচিত যা নেমে যাওয়ার পথে (মাইগ্রেশন) হারিয়ে যাবে।
কোস্তাস

4
আপনি যদি ডেটা লোড করতে চান, ব্যবহার করুন db/seeds.rb যদি আপনি সেখানে কিছু যুক্তিসঙ্গত বীজ ডেটা সেটআপ করেন তবে এটি আপনার বিকাশের ডিবিটিকে নুয়ে যাওয়ার পক্ষে খুব ধ্বংসাত্মক হওয়া উচিত নয়।
অ্যান্ডি লিন্ডেমান

কোন কিছুর দরকার নেই নীচে আমার সমাধান দেখুন। কেবল সচেতন থাকুন যে আপনার অনেকগুলি উদাহরণ থাকবে এবং যখন আপনি শাখাগুলি স্যুইচ করেন তখন ডেটা থাকে না। আপনি যদি পরীক্ষাগুলির সাথে বিকাশ করে থাকেন তবে এটি সম্পূর্ণ সূক্ষ্ম।
অ্যাডাম ডাইমিট্রিক

আপনাকে অ্যান্ডি ধন্যবাদ, এই উত্তরটি আমার প্রশ্ন। এবং db/seeds.rbহারানো ডিবি ডেটা রিপোপুলেটিংয়ের জন্য ব্যবহার করতে সম্মত হন
পাস্তলো

বড় জটিল অ্যাপগুলির জন্য যেখানে আপনাকে স্থানীয়ভাবে বাস্তবজীবনের বাগগুলি পুনরুত্পাদন করতে হবে সেখানে বীজ ফাইল ব্যবহার করা একেবারেই অসম্ভব, আপনার উত্পাদন (বা মঞ্চায়ন) থেকে আসল ডেটা দরকার। এবং একটি ডাটাবেস পুনরুদ্ধার করতে বেশ কিছুটা সময় নিতে পারে, সুতরাং এটি আমার ক্ষেত্রে ভাল সমাধান নয়।
জোয়েল_ ব্লুম

21

আপনার যদি এমন একটি বৃহত ডাটাবেস থাকে যা আপনি সহজেই পুনরুত্পাদন করতে না পারেন তবে আমি সাধারণ স্থানান্তর সরঞ্জামগুলি ব্যবহার করার পরামর্শ দেব recommend আপনি যদি একটি সহজ প্রক্রিয়া চান তবে এটি আমিই সুপারিশ করব:

  • শাখাগুলি স্যুইচ rake db:rollbackকরার আগে, শাখা পয়েন্টের আগে রাজ্যে রোলব্যাক ( ) করুন। তারপরে, শাখাগুলি স্যুইচ করার পরে চালান db:migrate। এটি গাণিতিকভাবে সঠিক, এবং যতক্ষণ আপনি downস্ক্রিপ্ট লিখবেন ততক্ষণ এটি কার্যকর হবে।
  • আপনি যদি শাখাগুলি স্যুইচ করার আগে এটি করতে ভুলে যান তবে সাধারণভাবে আপনি নিরাপদে ফিরে, রোলব্যাক এবং আবার স্যুইচ করতে পারেন, তাই আমি একটি কর্মপ্রবাহ হিসাবে মনে করি, এটি সম্ভব।
  • আপনার যদি বিভিন্ন শাখায় মাইগ্রেশনের মধ্যে নির্ভরতা থাকে ... ভাল, আপনাকে কঠোর চিন্তা করতে হবে।

2
আপনাকে মনে রাখতে হবে যে সমস্ত স্থানান্তর পুনরায় পরিবর্তনযোগ্য নয়, যা বলেছিল যে প্রথম প্রস্তাবিত পদক্ষেপটি সফল হওয়ার গ্যারান্টিযুক্ত নয়। আমি মনে করি যে উন্নয়নের পরিবেশে একটি ভাল ধারণাটি ব্যবহার করা হবে rake db:schema:loadএবং rake db:seed@ নুডল যেমনটি বলেছিলেন।
পিসারুক

@ পিসারুক আমি জানি আপনি ছয় বছর আগে এর জবাব দিয়েছিলেন, তবে পড়ার বিষয়টি আমি জানতে আগ্রহী যে অবিবর্তনীয় স্থানান্তরের উদাহরণ কী হবে। একটা পরিস্থিতি কল্পনা করতে আমার বেশ কষ্ট হচ্ছে। আমি অনুমান করি যে সর্বাধিকতম হ'ল একটি বাদ পড়া কলাম হবে যা গুচ্ছ ডেটা থাকবে, তবে এটি কোনও "ডিভার্স" হতে পারে একটি খালি কলাম বা কোনও কলামের জন্য কোনও ডিফল্ট মান। আপনি কি অন্যান্য মামলার কথা ভাবছেন?
লুক গ্রিফিথস

1
আমি আপনি আপনার নিজের প্রশ্নের উত্তর মনে! হ্যাঁ, একটি বাদ পড়া কলাম একটি ভাল উদাহরণ। বা একটি ধ্বংসাত্মক ডেটা মাইগ্রেশন।
এনডিপি

13

এখানে একটি স্ক্রিপ্ট আমি লিখেছি যেগুলি শাখাগুলির মধ্যে স্যুইচিংয়ের জন্য আলাদা মাইগ্রেশন রয়েছে:

https://gist.github.com/4076864

এটি আপনার উল্লিখিত সমস্ত সমস্যার সমাধান করবে না, তবে একটি শাখার নাম দিলে তা হবে:

  1. প্রদত্ত শাখায় অস্তিত্ব নেই এমন আপনার বর্তমান শাখায় কোনও স্থানান্তরকে রোল করুন
  2. ডিবি / স্কিমা.আরবি ফাইলে কোনও পরিবর্তন বাতিল করুন
  3. প্রদত্ত শাখাটি পরীক্ষা করে দেখুন
  4. প্রদত্ত শাখায় বিদ্যমান যে কোনও নতুন স্থানান্তর চালান Run
  5. আপনার পরীক্ষার ডাটাবেস আপডেট করুন

আমি আমাদের প্রকল্পে সর্বদা নিজেকে এই কাজটি করতে দেখি, তাই আমি ভেবেছিলাম প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে ভাল লাগবে।


1
এই স্ক্রিপ্টটি আমি যা করতে চাই ঠিক তা করে, আমি এটি একটি স্বয়ংক্রিয় চেকআউট হুকের মধ্যে দেখতে দেখতে পছন্দ করব।
ব্রাইসগো

1
এটি ঠিক এখানেই আমি আপনার সারাংশকে কাঁটাচামচ
ব্রাইসগো

আপনার স্ক্রিপ্টে, আপনি কি আসলেই বলতে চেয়েছিলেন git checkout db/schema.rbবা আপনার অর্থ git checkout -- db/schema.rb? (অর্থাত্ ডাবল ড্যাশ সহ)
ব্যবহারকারী 664833

1
হ্যাঁ হ্যাঁ ... আমি তখন ডাবল ড্যাশ সম্পর্কে জানতাম না। কমান্ডটি একই কাজ করবে যদি না আপনি কল পেয়ে একটি শাখা পেয়ে থাকেন db/schema.rb। :)
জোন লেমন

@ ব্রাইসগো-এর বিকশিত গিট_রেইস কমান্ড ( github.com/brysgo/git-rails ) দুর্দান্ত কাজ করে। আপনাকে ধন্যবাদ জোন :)
জিয়া উল রেহমান মুঘল

7

প্রতিটি শাখার জন্য পৃথক ডাটাবেস

এটি উড়ানোর একমাত্র উপায়।

আপডেট 16 ই অক্টোবর, 2017

আমি বেশ কিছু সময় পরে এই ফিরে এসেছি এবং কিছু উন্নতি করেছি:

  • আমি একটি শাখা তৈরি করতে এবং একটিতে ডাটাবেস ক্লোন করতে আরও একটি নেমস্পেস রাক টাস্ক যুক্ত করেছি, যার সাথে bundle exec rake git:branch
  • আমি এখন বুঝতে পেরেছি যে মাস্টারের কাছ থেকে ক্লোনিং করা আপনি যা করতে চান তা সর্বদা হয় না তাই আমি এটি আরও স্পষ্ট করে দিয়েছি যে db:clone_from_branchকার্যটি একটি SOURCE_BRANCHএবং TARGET_BRANCHপরিবেশের পরিবর্তনশীল লাগে takes যখন ব্যবহার git:branchএটি স্বয়ংক্রিয়ভাবে হিসাবে বর্তমান শাখা ব্যবহার করবে SOURCE_BRANCH
  • রিফ্যাক্টরিং এবং সরলীকরণ।

config/database.yml

এবং আপনার পক্ষে এটি আরও সহজ করার জন্য, database.ymlবর্তমান শাখার উপর ভিত্তি করে ডাটাবেসের নামটি গতিশীলভাবে নির্ধারণ করতে আপনি কীভাবে আপনার ফাইল আপডেট করবেন তা এখানে ।

<% 
database_prefix = 'your_app_name'
environments    = %W( development test ) 
current_branch  = `git status | head -1`.to_s.gsub('On branch ','').chomp
%>

defaults: &defaults
  pool: 5
  adapter: mysql2
  encoding: utf8
  reconnect: false
  username: root
  password:
  host: localhost

<% environments.each do |environment| %>  

<%= environment %>:
  <<: *defaults
  database: <%= [ database_prefix, current_branch, environment ].join('_') %>
<% end %>

lib/tasks/db.rake

আপনার ডাটাবেসটি সহজেই একটি শাখা থেকে অন্য শাখায় ক্লোন করার জন্য এখানে একটি রেক টাস্ক। এটি একটি SOURCE_BRANCHএবং TARGET_BRANCHপরিবেশের ভেরিয়েবল গ্রহণ করে। @ স্প্যালাডিনো এর কাজ বন্ধ করে দেওয়া ।

namespace :db do

  desc "Clones database from another branch as specified by `SOURCE_BRANCH` and `TARGET_BRANCH` env params."
  task :clone_from_branch do

    abort "You need to provide a SOURCE_BRANCH to clone from as an environment variable." if ENV['SOURCE_BRANCH'].blank?
    abort "You need to provide a TARGET_BRANCH to clone to as an environment variable."   if ENV['TARGET_BRANCH'].blank?

    database_configuration = Rails.configuration.database_configuration[Rails.env]
    current_database_name = database_configuration["database"]

    source_db = current_database_name.sub(CURRENT_BRANCH, ENV['SOURCE_BRANCH'])
    target_db = current_database_name.sub(CURRENT_BRANCH, ENV['TARGET_BRANCH'])

    mysql_opts =  "-u #{database_configuration['username']} "
    mysql_opts << "--password=\"#{database_configuration['password']}\" " if database_configuration['password'].presence

    `mysqlshow #{mysql_opts} | grep "#{source_db}"`
    raise "Source database #{source_db} not found" if $?.to_i != 0

    `mysqlshow #{mysql_opts} | grep "#{target_db}"`
    raise "Target database #{target_db} already exists" if $?.to_i == 0

    puts "Creating empty database #{target_db}"
    `mysql #{mysql_opts} -e "CREATE DATABASE #{target_db}"`

    puts "Copying #{source_db} into #{target_db}"
    `mysqldump #{mysql_opts} #{source_db} | mysql #{mysql_opts} #{target_db}`

  end

end

lib/tasks/git.rake

এই টাস্কটি বর্তমান শাখার বাইরে একটি গিট শাখা তৈরি করবে (মাস্টার বা অন্যথায়), এটি পরীক্ষা করে দেখুন এবং নতুন শাখার ডাটাবেসে বর্তমান শাখার ডেটাবেস ক্লোন করুন। এটি স্মার্ট এএফ।

namespace :git do

  desc "Create a branch off the current branch and clone the current branch's database."
  task :branch do 
    print 'New Branch Name: '
    new_branch_name = STDIN.gets.strip 

    CURRENT_BRANCH = `git status | head -1`.to_s.gsub('On branch ','').chomp

    say "Creating new branch and checking it out..."
    sh "git co -b #{new_branch_name}"

    say "Cloning database from #{CURRENT_BRANCH}..."

    ENV['SOURCE_BRANCH'] = CURRENT_BRANCH # Set source to be the current branch for clone_from_branch task.
    ENV['TARGET_BRANCH'] = new_branch_name
    Rake::Task['db:clone_from_branch'].invoke

    say "All done!"
  end

end

এখন, আপনাকে যা করতে হবে তা হল চালানো bundle exec git:branch, নতুন শাখার নাম লিখুন এবং জম্বিদের হত্যা শুরু করুন।


4

আপনার বিকাশের ডেটাবেস খুব বড় যে ইঙ্গিত হিসাবে নেওয়া উচিত? আপনি যদি ডিবি / বীজ.আরবি এবং উন্নয়নের জন্য একটি ছোট ডেটা সেট ব্যবহার করতে পারেন তবে বর্তমান শাখা থেকে স্কিমা.আরবি এবং বীজ.আরবি ব্যবহার করে আপনার সমস্যাটি সহজেই সমাধান করা যেতে পারে।

এটি ধরে নিয়েছে যে আপনার প্রশ্নটি উন্নয়নের সাথে সম্পর্কিত; কেন আপনি নিয়মিত উত্পাদনে শাখা পরিবর্তন করতে চান তা আমি ভাবতে পারি না।


আমি জানতাম না db/seeds.rb, আমি এটি একবার দেখে নেব
Kostas

3

আমি একই ইস্যু নিয়ে লড়াই করে যাচ্ছিলাম। এখানে আমার সমাধান:

  1. নিশ্চিত হয়ে নিন যে স্কিমি.আরবি এবং সমস্ত স্থানান্তর উভয়ই বিকাশকারী দ্বারা চেক ইন করেছেন।

  2. উত্পাদনে মোতায়েনের জন্য একজন ব্যক্তি / মেশিন থাকতে হবে। আসুন এই মেশিনটিকে মার্জ-মেশিন হিসাবে কল করুন। পরিবর্তনগুলি যখন মার্জ মেশিনে টানা থাকে তখন স্কিমা.আরবি'র জন্য স্বয়ংক্রিয় সংযোজন ব্যর্থ হবে। কোন কারণ নাই. স্কিমা.আরবির পূর্ববর্তী বিষয়বস্তু যা ছিল তা দিয়ে কেবল সামগ্রীটি প্রতিস্থাপন করুন (আপনি যদি এটি ব্যবহার করেন তবে আপনি একটি অনুলিপি আলাদা করে রাখতে পারেন বা গিথুব থেকে পেতে পারেন ...)।

  3. এখানে গুরুত্বপূর্ণ পদক্ষেপ। সমস্ত বিকাশকারীদের স্থানান্তরগুলি এখন db / স্থানান্তর ফোল্ডারে পাওয়া যাবে। এগিয়ে যান এবং বান্ডেল এক্সেক রেক ডিবি চালান: স্থানান্তর করুন। এটি সমস্ত পরিবর্তনের সাথে একত্রে মার্জ মেশিনে ডাটাবেস আনবে। এটি স্কিমা.আরবি পুনরুত্পাদনও করবে।

  4. সমস্ত প্রতিলিপিগুলিতে পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ এবং তা ঠেলে দিন (রিমোট এবং ব্যক্তিরা, যা দূরবর্তীও)। আপনার করা উচিত!


3

এটি আমি করেছিলাম এবং আমি নিশ্চিত না যে আমি সমস্ত ঘাঁটিটি coveredেকে রেখেছি:

বিকাশে (পোস্টগ্র্যাস্কল ব্যবহার করে):

  • sql_dump db_name> tmp / branch1.sql
  • গিট চেকআউট শাখা 2
  • ড্রপবিডি ডিবি_নাম
  • createdb db_name
  • পিএসকিএল ডিবি_নাম <টিএমপি / শাখা 2.এসকিউএল # (পূর্ববর্তী শাখার স্যুইচ থেকে)

এটি প্রায় 50K রেকর্ড সহ একটি ডাটাবেসে রেক ইউটিলিটির চেয়ে অনেক দ্রুত।

উত্পাদনের জন্য মাস্টার ব্রাঞ্চকে স্যাক্রোস্যানেক্ট হিসাবে বজায় রাখুন এবং সমস্ত মাইগ্রেশন চেক ইন করা হয়েছে, shema.rb সঠিকভাবে মার্জ হয়েছে। আপনার স্ট্যান্ডার্ড আপগ্রেড প্রক্রিয়াটি দেখুন।


পর্যাপ্ত পরিমাণে ডাটাবেস আকারের জন্য এবং একটি শাখা পরীক্ষা করে নেওয়ার সময় ব্যাকগ্রাউন্ডে এটি করা খুব সুন্দর সমাধানের মতো দেখায়।
Kostas

2

আপনি প্রতিটি শাখায় একটি "ডিবি পরিবেশ" সংরক্ষণ করতে চান। বিভিন্ন দৃষ্টান্ত দেখানোর জন্য স্মাড / ক্লিন স্ক্রিপ্ট দেখুন। আপনি যদি ডিবি উদাহরণস্বরূপ না চালিয়ে যান, স্ক্রিপ্টটি কোনও অস্থায়ী দৃষ্টান্তটি সরিয়ে ফেলুন তাই আপনি যখন একটি নতুন শাখায় স্যুইচ করেন, এটি ইতিমধ্যে সেখানে রয়েছে এবং স্ক্রিপ্টটির দ্বারা নতুন নামকরণ করা দরকার। আপনি আপনার পরীক্ষাগুলি চালানোর ঠিক আগে ডিবি আপডেটগুলি চালানো উচিত।

আশাকরি এটা সাহায্য করবে.


এই সমাধানটি কেবল "অস্থায়ী" শাখার জন্য ভাল good উদাহরণস্বরূপ, যদি আমাদের একটি শাখা "প্রান্ত" থাকে তবে আমরা কি সমস্ত ধরণের পাগল স্টাফগুলি পরীক্ষা করতে পারি (সম্ভবত অন্যান্য উপ-শাখাগুলির সাথে) এবং পরে সময়ে সময়ে এটি মাস্টারের সাথে মিশ্রিত হত, 2 ডাটাবেসগুলি পৃথকভাবে বিচ্ছিন্ন হবে (তাদের ডেটা হবে না একই হও).
Kostas

এই সমাধানটি ঠিক বিপরীত পক্ষে ভাল। আপনি যদি আপনার ডাটাবেস সংস্করণ স্ক্রিপ্টটি সংস্করণ করেন তবে এটি একটি খুব ভাল সমাধান।
অ্যাডাম ডাইমিট্রুক

2

আপনার এখানে থাকা পিটাটি আমি পুরোপুরি অভিজ্ঞতা করি। আমি এটি সম্পর্কে যেমন মনে করি, আসল সমস্যাটি হ'ল সমস্ত শাখার নির্দিষ্ট কিছু শাখা রোলব্যাক করার কোড নেই। আমি জ্যাঙ্গো বিশ্বে আছি, তাই আমি জানি না যে রাকটি ভাল। আমি এই ধারণাটি নিয়েই আগ্রহী যে মাইগ্রেশনগুলি তাদের নিজস্ব রেপোতে বাস করে যা ব্রাঞ্চ হয় না (গিট-সাবমডিউল, যা আমি সম্প্রতি শিখেছি)। এইভাবে সমস্ত শাখায় সমস্ত স্থানান্তর রয়েছে। স্টিকি অংশটি নিশ্চিত করছে যে প্রতিটি শাখা কেবলমাত্র তাদের স্থানান্তরিত স্থানান্তরের মধ্যে সীমাবদ্ধ। ম্যানুয়ালি সেই ট্র্যাক করা / চালানো পিটা হবে এবং ত্রুটির ঝুঁকিতে থাকবে। তবে মাইগ্রেশন সরঞ্জামগুলির কোনওটিই এর জন্য নির্মিত হয়নি। এটাই যে বিন্দুতে আমি এগিয়ে যাওয়ার পথ ছাড়াই।


এটি একটি দুর্দান্ত ধারণা তবে যখন কোনও শাখা একটি কলামটির নাম পরিবর্তন করে? বাকি শাখাগুলি একটি ভাঙা টেবিলের দিকে তাকিয়ে থাকবে।
কোস্তাস

উম - এটি স্টিকি অংশ - কোন শাখা কোন স্থানান্তর সম্পর্কে যত্নশীল about যাতে আপনি "সিঙ্ক" করতে পারেন এবং এটি জানেন, "এই মাইগ্রেশনটি ফিরিয়ে দিন" যাতে কলামটি ফিরে যায়।
জন

1

আমি দুটি বিকল্পের মধ্যে একটির পরামর্শ দেব:

বিকল্প 1

  1. আপনার তথ্য রাখুন seeds.rb। ফ্যাক্টরিগার্ল / ফ্যাব্রিকেশন রত্নের মাধ্যমে আপনার বীজের ডেটা তৈরি করা একটি দুর্দান্ত বিকল্প। এইভাবে আপনি গ্যারান্টি দিতে পারেন যে কোডটি কোডের সাথে সিঙ্কে রয়েছে আমরা যদি ধরে নিই, কারখানাগুলি কলাম যুক্ত / অপসারণের সাথে একসাথে আপডেট হয়েছে।
  2. একটি শাখা থেকে অন্য শাখায় স্যুইচ করার পরে, চালান rake db:reset, যা কার্যকরভাবে ডাটাবেসটিকে ড্রপ / তৈরি / বীজ করে।

বিকল্প 2

ম্যানুয়ালি সব সময় চলার ডাটাবেসের রাজ্যের বজায় রাখা rake db:rollback/ rake db:migrateপূর্বে / একটি শাখা চেকআউট পর। সতর্কবাণীটি হ'ল আপনার সমস্ত মাইগ্রেশনগুলি বিপরীতমুখী হওয়া দরকার, অন্যথায় এটি কাজ করবে না।


0

উন্নয়নের পরিবেশে:

rake db:migrate:redoআপনার স্ক্রিপ্টটি যদি বিপরীতমুখী হয় তবে তা পরীক্ষা করার জন্য আপনার কাজ করা উচিত , তবে মনে রাখবেন সর্বদা seed.rbডেটা জনসংখ্যার সাথে থাকা উচিত ।

আপনি যদি গিট দিয়ে কাজ করেন তবে আপনার বীজ.আরবি হস্তান্তর পরিবর্তনের সাথে পরিবর্তন হওয়া উচিত, আর db:migrate:redoশুরুতে মৃত্যুদণ্ড কার্যকর করা উচিত (অন্য মেশিনে বা নতুন ডাটাবেসে নতুন বিকাশের জন্য ডেটা লোড করুন)

বিনিময় ছাড়াও, আপনার আপ এবং ডাউন এর পদ্ধতিগুলির সাথে আপনার কোডটি সর্বদা এই মুহুর্তে "পরিবর্তন" এবং শূন্য থেকে শুরু করার সময় কভারের দৃশ্যধারণ করা উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.