আমার কাছে নিম্নলিখিত মাইগ্রেশন ফাইল রয়েছে db\migrate\20100905201547_create_blocks.rb
আমি কীভাবে বিশেষভাবে সেই মাইগ্রেশন ফাইলটি রোলব্যাক করব?
আমার কাছে নিম্নলিখিত মাইগ্রেশন ফাইল রয়েছে db\migrate\20100905201547_create_blocks.rb
আমি কীভাবে বিশেষভাবে সেই মাইগ্রেশন ফাইলটি রোলব্যাক করব?
উত্তর:
rake db:rollback STEP=1
এটি করার একটি উপায়, আপনি যে মাইগ্রেশনটি রোলব্যাক করতে চান তা সর্বশেষ প্রয়োগ করা হয়। আপনি ফিরে যেতে চান এমন অনেকগুলি মাইগ্রেশনের জন্য আপনি 1 এর বিকল্প দিতে পারেন।
উদাহরণ স্বরূপ:
rake db:rollback STEP=5
পরবর্তী সময়ে ঘটে যাওয়া সমস্ত স্থানান্তরও রোলব্যাক করবে (4, 3, 2 এবং 1)।
সমস্ত মাইগ্রেশনকে টার্গেট মাইগ্রেশনে ফিরিয়ে আনতে (এবং অন্তর্ভুক্ত) ব্যবহার করুন: (মূল পোস্টে ত্রুটিটি নির্দেশ করে সমস্ত মন্তব্যের পরে এই সংশোধিত কমান্ডটি যুক্ত করা হয়েছিল)
rake db:migrate VERSION=20100905201547
শুধুমাত্র এক নির্দিষ্ট মাইগ্রেশন (আউট অফ অর্ডার) রোলব্যাক করার জন্য:
rake db:migrate:down VERSION=20100905201547
নোট করুন যে এটি কোনও মধ্যবর্তী স্থানান্তরকে রোলব্যাক করবে না - কেবলমাত্র তালিকাভুক্ত। যদি এটি আপনি যা ইচ্ছা করেছিলেন তা না হলে আপনি নিরাপদে চালাতে পারবেন rake db:migrate
এবং এটি কেবল আবার চালানো হবে, এমন কোনও অন্যকে এড়িয়ে যাবেন যা পূর্বে ঘুরিয়ে ছিল না।
এবং যদি আপনি কোনও একক স্থানান্তরকে অর্ডার থেকে সরিয়ে নিতে চান তবে এর বিপরীতটিও রয়েছে db:migrate:up
:
rake db:migrate:up VERSION=20100905201547
STEP=-1
। আমি এটি একবার করেছিলাম এবং এটি পাগল হয়ে গেছে, সমস্ত কিছু ফিরিয়ে আনছে। সুন্দর না! এটি ছিল 4.2 রেল - আমার ধারণা এটি এখনই ঠিক হয়ে যেতে পারে।
rake db:migrate:down VERSION=20100905201547
নির্দিষ্ট ফাইলটি আবার রোল করবে।
সমস্ত স্থানান্তরের সংস্করণ সন্ধান করতে আপনি এই আদেশটি ব্যবহার করতে পারেন:
rake db:migrate:status
অথবা, স্থানান্তরিত ফাইলের নামের পূর্বরূপটি আপনার রোলব্যাক করার প্রয়োজন সংস্করণ।
মাইগ্রেশনে রুবে অন রেল গাইড এন্ট্রি দেখুন ।
শেষ স্থানান্তর রোলব্যাক করতে আপনি এটি করতে পারেন:
rake db:rollback
আপনি যদি কোনও সংস্করণ সহ একটি নির্দিষ্ট স্থানান্তর রোলব্যাক করতে চান তবে আপনার যা করা উচিত:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
উদাহরণস্বরূপ, যদি সংস্করণটি 20141201122027 হয়, আপনি এটি করবেন:
rake db:migrate:down VERSION=20141201122027
নির্দিষ্ট মাইগ্রেশন রোলব্যাক করতে।
rake db:rollback
বিভিন্ন বিকল্পের সাহায্যে আপনি নিজের স্থানান্তর রোলব্যাক করতে পারেন । আপনার প্রয়োজনীয়তা অনুযায়ী বাক্য গঠন আলাদা হবে।
আপনি যদি কেবলমাত্র সর্বশেষ স্থানান্তরকে রোলব্যাক করতে চান তবে আপনি যে কোনওটি ব্যবহার করতে পারেন
rake db:rollback
অথবা
rake db:rollback STEP=1
আপনি যদি একবারে মাইগ্রেশনের রোলব্যাক নম্বর চান, তবে আপনি কেবল একটি যুক্তিটি পাস করুন:
rake db:rollback STEP=n
n
সর্বশেষ স্থানান্তর থেকে গণনা, রোলব্যাকে স্থানান্তরের সংখ্যা কোথায় where
আপনি যদি কোনও নির্দিষ্ট স্থানান্তরে রোলব্যাক করতে চান তবে আপনার স্থানান্তরের সংস্করণটি নিম্নলিখিতটিতে পাস করা উচিত:
rake db:migrate:down VERSION=xxxxx
যেখানে এক্সএক্সএক্সএক্সএক্সএক্স হ'ল মাইগ্রেশনের সংস্করণ নম্বর।
rake db:migrate:down VERSION=your_migrations's_version_number_here
সংস্করণটি হ'ল মাইগ্রেশনের ফাইলের নামের সংখ্যাসূচক উপসর্গ
সংস্করণটি কীভাবে সন্ধান করবেন :
আপনার স্থানান্তর ফাইলগুলি আপনার rails_root/db/migrate
ডিরেক্টরিতে সংরক্ষিত আছে । আপনি যে ফাইলটি রোলব্যাক করতে এবং উপসর্গের নম্বরটি অনুলিপি করতে চান তা সন্ধান করুন।
উদাহরণ স্বরূপ
ফাইলের নাম: 20140208031131_create_roles.rb
তবে সংস্করণটি20140208031131
rake db:migrate:status
শেষ স্থানান্তরের পিছনে ঘুরছে:
# rails < 5.0
rake db:rollback
# rails >= 5.0
rake db:rollback
# or
rails db:rollback
শেষ দিকে ঘূর্ণায়মান n
মাইগ্রেশনের সংখ্যাটি
# rails < 5.0
rake db:rollback STEP=2
# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2
একটি নির্দিষ্ট স্থানান্তর পিছনে রোলিং
# rails < 5.0
rake db:migrate:down VERSION=20100905201547
# rails >= 5.0
rake db:migrate:down VERSION=20100905201547
# or
rails db:migrate:down VERSION=20100905201547
শেষ স্থানান্তর রোলব্যাক করতে আপনি এটি করতে পারেন:
rake db:rollback
আপনি যদি কোনও সংস্করণ সহ একটি নির্দিষ্ট স্থানান্তর রোলব্যাক করতে চান তবে আপনার যা করা উচিত:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
আপনি যে মাইগ্রেশন ফাইলটি রোলব্যাক করতে চান তা যদি কল করা হয়েছিল db/migrate/20141201122027_create_some_table.rb
, তবে সেই মাইগ্রেশনের জন্য ভার্সনটি হ'ল 20141201122027
সেই মাইগ্রেশনটি কখন তৈরি হয়েছিল তার টাইমস্ট্যাম্প এবং সেই মাইগ্রেশনটি ফিরিয়ে আনার আদেশটি হ'ল:
rake db:migrate:down VERSION=20141201122027
সমস্ত মাইগ্রেশনকে কোনও নির্দিষ্ট সংস্করণে রোল করতে (যেমন 20181002222222
), ব্যবহার করুন:
rake db:migrate VERSION=20181002222222
(দ্রষ্টব্য যে এটি ব্যবহার করে db:migrate
- db:migrate:down
এই প্রশ্নের অন্যান্য উত্তরের মতো নয় ))
নির্দিষ্ট মাইগ্রেশন সংস্করণটি বর্তমান সংস্করণের চেয়ে পুরানো বলে ধরে নেওয়া, এটি নির্দিষ্ট স্থানান্তরিত না করে সমস্ত মাইগ্রেশন ব্যাক আপ করবে।
উদাহরণস্বরূপ, যদি rake db:migrate:status
প্রাথমিকভাবে প্রদর্শিত হয়:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
up 20181003171932 Some migration description
up 20181004211151 Some migration description
up 20181005151403 Some migration description
চলমান:
rake db:migrate VERSION=20181002222222
ফলাফল হবে:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
down 20181003171932 Some migration description
down 20181004211151 Some migration description
down 20181005151403 Some migration description
তথ্যসূত্র: https://makandracards.com/makandra/845-migrate-or-revert-only-some- ইমিগ্রেশন
রেল গাইড থেকে
আপনি revert
পদ্ধতিটি ব্যবহার করে মাইগ্রেশন রোলব্যাক করতে সক্রিয় রেকর্ডের ক্ষমতা ব্যবহার করতে পারেন :
require_relative '20100905201547_create_blocks'
class FixupCreateBlock < ActiveRecord::Migration
def change
revert CreateBlock
create_table(:apples) do |t|
t.string :variety
end
end
end
revert
পদ্ধতি এছাড়াও বিপরীত নির্দেশাবলী একটি ব্লক গ্রহণ করে। এটি পূর্ববর্তী স্থানান্তরের নির্বাচিত অংশগুলি ফিরিয়ে আনতে কার্যকর হতে পারে। উদাহরণস্বরূপ, আসুন কল্পনা করুন যে ক্রিয়েটব্লক প্রতিশ্রুতিবদ্ধ এবং পরে সিদ্ধান্ত নেওয়া হয়েছে যে জিপকোড যাচাই করার জন্য চেক সীমাবদ্ধতার জায়গায় অ্যাক্টিভ রেকর্ড বৈধতা ব্যবহার করা ভাল be
class DontUseConstraintForZipcodeValidationMigration < ActiveRecord::Migration
def change
revert do
# copy-pasted code from CreateBlock
reversible do |dir|
dir.up do
# add a CHECK constraint
execute <<-SQL
ALTER TABLE distributors
ADD CONSTRAINT zipchk
CHECK (char_length(zipcode) = 5);
SQL
end
dir.down do
execute <<-SQL
ALTER TABLE distributors
DROP CONSTRAINT zipchk
SQL
end
end
# The rest of the migration was ok
end
end
end
একই মাইগ্রেশনটিও রিভার্ট ব্যবহার না করেই লেখা যেতে পারে তবে এতে আরও কয়েকটি পদক্ষেপ জড়িত থাকতে পারে: ক্রিয়েট-টেবিল এবং বিপরীতমুখী ক্রমের বিপরীতকরণ, ড্রপ_ টেবিলের মাধ্যমে ক্রিয়েট_ টেবিলকে প্রতিস্থাপন এবং অবশেষে ডাউন এবং বিপরীত দ্বারা প্রতিস্থাপন করা হবে। এই সব রিভার্ট দ্বারা যত্ন নেওয়া হয়।
অভিবাসনগুলি কমান্ডটি ব্যবহার করে ডাটাবেসের স্থিতি পরিবর্তন করে
$ bundle exec rake db:migrate
আমরা একটি একক স্থানান্তর পদক্ষেপটি ব্যবহার করে পূর্বাবস্থাপন করতে পারি
$ bundle exec rake db:rollback
শুরুতে সমস্ত পথে ফিরে যেতে, আমরা ব্যবহার করতে পারি
$ bundle exec rake db:migrate VERSION=0
আপনারা যেমন অনুমান করতে পারেন, 0 সংস্করণ সংখ্যায় স্থানান্তরিত করার জন্য অন্য কোনও সংখ্যার পরিবর্তিত করুন, যেখানে সংস্করণ নম্বরগুলি মাইগ্রেশনগুলি যথাযথভাবে তালিকাভুক্তকরণ থেকে আসে
ওয়েল 5 রেল এটি বেশ সহজ রেক ডিবি: স্থানান্তর: স্থিতি বা রেলগুলি ডিবি: স্থানান্তর: স্থিতি
এটি উভয়ভাবে একইভাবে পরিচালনা করতে সংশোধন করা হয়েছিল তারপরে আপনি কোন সংস্করণটি আবার রোল করতে চান তা চয়ন করুন এবং তারপরে রেক ডিবি চালান: ভার্সন = 2013424230423 স্থানান্তর করুন
নিশ্চিত করুন যে VERSION সমস্ত বড় অক্ষর
মাইগ্রেশনের কোনও পদক্ষেপ নিয়ে আপনার যদি সমস্যা হয় বা মাঝখানে আটকে থাকে তবে কেবল মাইগ্রেশন ফাইলে যান এবং ইতিমধ্যে স্থানান্তরিত লাইনগুলিতে মন্তব্য করুন।
আশা করি এইটি কাজ করবে
Class.down
stackoverflow.com/questions/753919/run-a-single-migration-file