প্রতিটি শাখার জন্য পৃথক ডাটাবেস
এটি উড়ানোর একমাত্র উপায়।
আপডেট 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
, নতুন শাখার নাম লিখুন এবং জম্বিদের হত্যা শুরু করুন।