কিভাবে একটি নির্দিষ্ট স্থানান্তর রোলব্যাক করবেন?


806

আমার কাছে নিম্নলিখিত মাইগ্রেশন ফাইল রয়েছে db\migrate\20100905201547_create_blocks.rb

আমি কীভাবে বিশেষভাবে সেই মাইগ্রেশন ফাইলটি রোলব্যাক করব?


1
এই সমস্যার সমাধান করে? আপনি শুধু এটি করতে হবে Class.down stackoverflow.com/questions/753919/run-a-single-migration-file
danivovich

4
মাইগ্রেশন সম্পর্কিত প্রতিটি তথ্য এখানে
নিশুতোষ শর্মা

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

উত্তর:


1339
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

14
"নির্দিষ্ট সংস্করণে রোলব্যাক করার জন্য" - এই সংস্করণটিতে সমস্ত পথ ঘুরিয়ে দেওয়ার পরিবর্তে কেবল নির্দিষ্ট স্থানান্তরকে রোলব্যাক অনুসরণ করে এমন আদেশটি কি না?
অ্যান্ড্রু গ্রিম

10
"নির্দিষ্ট সংস্করণে রোলব্যাক করার জন্য ..." এই উত্তরটি ভুল! এটি অন্যান্য উত্তরের হিসাবে ব্যাখ্যা হিসাবে বিচ্ছিন্নভাবে মাইগ্রেশনকে রোলব্যাক করবে।
রাইস ভ্যান ডার ওয়েয়ার্ডেন

3
সতর্কতা: আমি এই ভুলটি করেছি: কেবল রেক ডিবি ব্যবহার করুন: মাইগ্রেট করুন: বিচ্ছিন্নতায় রোলব্যাক করতে VERSION = 20100905201547 ডাউন করুন !!! একটি স্থানান্তর ফাইল। এটি উপরের মন্তব্যে উল্লেখ করা হয়েছে, তবে আমি এটি মিস করেছি।
পিক্সিলিথ

3
সতর্কতার আরেকটি শব্দ - কখনও করবেন না STEP=-1। আমি এটি একবার করেছিলাম এবং এটি পাগল হয়ে গেছে, সমস্ত কিছু ফিরিয়ে আনছে। সুন্দর না! এটি ছিল 4.2 রেল - আমার ধারণা এটি এখনই ঠিক হয়ে যেতে পারে।
ডেভ হার্টনল

1
মাইগ্রেশন সম্পর্কে আমার ব্লগে একটি নিবন্ধ লিখেছেন, যাতে এই আদেশগুলি কীভাবে এবং কখন ব্যবহার করতে হবে তা ব্যাখ্যা করে: Railsguides.net/polish-rails-migration
ka8725

867
rake db:migrate:down VERSION=20100905201547

নির্দিষ্ট ফাইলটি আবার রোল করবে।


সমস্ত স্থানান্তরের সংস্করণ সন্ধান করতে আপনি এই আদেশটি ব্যবহার করতে পারেন:

rake db:migrate:status

অথবা, স্থানান্তরিত ফাইলের নামের পূর্বরূপটি আপনার রোলব্যাক করার প্রয়োজন সংস্করণ।


মাইগ্রেশনে রুবে অন রেল গাইড এন্ট্রি দেখুন ।


48
অবশ্যই আমার মতে পছন্দসই উত্তর।
স্ট্রিটলগিক্স

30
এটি উল্লেখ করার মতো যে আপনি যদি কোনও নির্দিষ্ট স্থানান্তর পিছনে ফিরে যান এবং আসন্ন রেক কার্যগুলিতে এটি পুনরায় মাইগ্রেট করতে না চান, তবে স্থানান্তরিত ফাইলটিও মুছুন।
ব্র্যাডগ্রিনস

4
দ্রষ্টব্য: মনে হচ্ছে আপ আপ স্থানান্তর কখনই সফল হয় নি তবে কেবল আংশিকভাবে কার্যকর করা হয়েছে, ডাউনটি কিছুই করে না।
সাইরিলচ্যাম্পিয়ার

1
@ ইউনিথ, এটি সম্ভবত কেবলমাত্র ডাটাবেসের ক্ষেত্রে সত্য যা ট্রানজেকশনাল ডিডিএল সমর্থন করে না। মাইএসকিউএল ট্রানজেকশনাল ডিডিএল সমর্থন করে না: dev.mysql.com/doc/refman/5.0/en/cannot-rol-back.html পোস্টরেএসকিউএল করে: wiki.postgresql.org/wiki/… সুতরাং যদি মাইএসকিউএল ডাটাবেসে আপনার মাইগ্রেশনটি ভেঙে যায় তারপরে আপনাকে মাইগ্রেশন সহ মাইগ্রেশনের অংশটি মুছে ফেলতে হবে যা সফল হয়েছিল।
Бишевац Бишевац

1
@ ব্র্যাডগ্রেন মন্তব্য সম্পর্কিত আরেকটি পর্যবেক্ষণ। আপনি যদি মাইগ্রেশন ফাইলটি সরিয়ে নিতে চান এবং এটি ইতিমধ্যে মোতায়েন করা হয়েছে, আপনি মুছে ফেলা ফাইলটির সাথে কোডটি সম্পাদন করার আগে আপনি উত্পাদন / পর্যায়ক্রমে ফিরে যেতে চান। অন্যথায় আপনি রোলব্যাক / মাইগ্রেট করতে পারবেন না: ডাউন।
অ্যাডামটি

57

শেষ স্থানান্তর রোলব্যাক করতে আপনি এটি করতে পারেন:

rake db:rollback

আপনি যদি কোনও সংস্করণ সহ একটি নির্দিষ্ট স্থানান্তর রোলব্যাক করতে চান তবে আপনার যা করা উচিত:

rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION

উদাহরণস্বরূপ, যদি সংস্করণটি 20141201122027 হয়, আপনি এটি করবেন:

rake db:migrate:down VERSION=20141201122027

নির্দিষ্ট মাইগ্রেশন রোলব্যাক করতে।


32

rake db:rollbackবিভিন্ন বিকল্পের সাহায্যে আপনি নিজের স্থানান্তর রোলব্যাক করতে পারেন । আপনার প্রয়োজনীয়তা অনুযায়ী বাক্য গঠন আলাদা হবে।

আপনি যদি কেবলমাত্র সর্বশেষ স্থানান্তরকে রোলব্যাক করতে চান তবে আপনি যে কোনওটি ব্যবহার করতে পারেন

rake db:rollback

অথবা

rake db:rollback STEP=1

আপনি যদি একবারে মাইগ্রেশনের রোলব্যাক নম্বর চান, তবে আপনি কেবল একটি যুক্তিটি পাস করুন:

rake db:rollback STEP=n

nসর্বশেষ স্থানান্তর থেকে গণনা, রোলব্যাকে স্থানান্তরের সংখ্যা কোথায় where

আপনি যদি কোনও নির্দিষ্ট স্থানান্তরে রোলব্যাক করতে চান তবে আপনার স্থানান্তরের সংস্করণটি নিম্নলিখিতটিতে পাস করা উচিত:

rake db:migrate:down VERSION=xxxxx

যেখানে এক্সএক্সএক্সএক্সএক্সএক্স হ'ল মাইগ্রেশনের সংস্করণ নম্বর।


1
যোগ করা: ডাউন যদিও কাজ করছে না, সঠিক উত্তরটি ডাউন ছাড়াই রয়েছে
Elta3lab

26

rake db:migrate:down VERSION=your_migrations's_version_number_here

সংস্করণটি হ'ল মাইগ্রেশনের ফাইলের নামের সংখ্যাসূচক উপসর্গ

সংস্করণটি কীভাবে সন্ধান করবেন :

আপনার স্থানান্তর ফাইলগুলি আপনার rails_root/db/migrateডিরেক্টরিতে সংরক্ষিত আছে । আপনি যে ফাইলটি রোলব্যাক করতে এবং উপসর্গের নম্বরটি অনুলিপি করতে চান তা সন্ধান করুন।

উদাহরণ স্বরূপ

ফাইলের নাম: 20140208031131_create_roles.rb তবে সংস্করণটি20140208031131


6
মাইগ্রেশন আইডি সন্ধান করার সহজ rake db:migrate:status
উপায়টি

18

শেষ স্থানান্তরের পিছনে ঘুরছে:

# 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

14

শেষ স্থানান্তর রোলব্যাক করতে আপনি এটি করতে পারেন:

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

6

এটি যদি কোনও বিপরীতমুখী স্থানান্তর হয় এবং শেষটি কার্যকর হয় তবে এটি চালান rake db:rollback। এবং আপনি সর্বদা সংস্করণ ব্যবহার করতে পারেন। যেমন

স্থানান্তর ফাইলটি 20140716084539_create_customer_stats.rb, সুতরাং রোলব্যাক কমান্ডটি হবে, rake db:migrate:down VERSION=20140716084539


6

সমস্ত মাইগ্রেশনকে কোনও নির্দিষ্ট সংস্করণে রোল করতে (যেমন 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- ইমিগ্রেশন


4

রেল গাইড থেকে

পূর্ববর্তী মাইগ্রেশনগুলি ফিরিয়ে নেওয়া হচ্ছে

আপনি 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

একই মাইগ্রেশনটিও রিভার্ট ব্যবহার না করেই লেখা যেতে পারে তবে এতে আরও কয়েকটি পদক্ষেপ জড়িত থাকতে পারে: ক্রিয়েট-টেবিল এবং বিপরীতমুখী ক্রমের বিপরীতকরণ, ড্রপ_ টেবিলের মাধ্যমে ক্রিয়েট_ টেবিলকে প্রতিস্থাপন এবং অবশেষে ডাউন এবং বিপরীত দ্বারা প্রতিস্থাপন করা হবে। এই সব রিভার্ট দ্বারা যত্ন নেওয়া হয়।


3

অভিবাসনগুলি কমান্ডটি ব্যবহার করে ডাটাবেসের স্থিতি পরিবর্তন করে

$ bundle exec rake db:migrate

আমরা একটি একক স্থানান্তর পদক্ষেপটি ব্যবহার করে পূর্বাবস্থাপন করতে পারি

  $ bundle exec rake db:rollback

শুরুতে সমস্ত পথে ফিরে যেতে, আমরা ব্যবহার করতে পারি

  $ bundle exec rake db:migrate VERSION=0

আপনারা যেমন অনুমান করতে পারেন, 0 সংস্করণ সংখ্যায় স্থানান্তরিত করার জন্য অন্য কোনও সংখ্যার পরিবর্তিত করুন, যেখানে সংস্করণ নম্বরগুলি মাইগ্রেশনগুলি যথাযথভাবে তালিকাভুক্তকরণ থেকে আসে


2

ওয়েল 5 রেল এটি বেশ সহজ রেক ডিবি: স্থানান্তর: স্থিতি বা রেলগুলি ডিবি: স্থানান্তর: স্থিতি

এটি উভয়ভাবে একইভাবে পরিচালনা করতে সংশোধন করা হয়েছিল তারপরে আপনি কোন সংস্করণটি আবার রোল করতে চান তা চয়ন করুন এবং তারপরে রেক ডিবি চালান: ভার্সন = 2013424230423 স্থানান্তর করুন

নিশ্চিত করুন যে VERSION সমস্ত বড় অক্ষর

মাইগ্রেশনের কোনও পদক্ষেপ নিয়ে আপনার যদি সমস্যা হয় বা মাঝখানে আটকে থাকে তবে কেবল মাইগ্রেশন ফাইলে যান এবং ইতিমধ্যে স্থানান্তরিত লাইনগুলিতে মন্তব্য করুন।

আশা করি এইটি কাজ করবে


1
কমান্ড রেক ডিবি: স্থানান্তর: স্থিতির ইঙ্গিতটি আমি হাইলাইট করেছি । । । মাইগ্রেশন ফাইলগুলির বর্তমান সম্পাদনের অবস্থাটি দেখার জন্য ওভারভিউয়ের পক্ষে এটি দুর্দান্ত।
সৌন্দর্য

1

আপনি যদি রোলব্যাক এবং মাইগ্রেট করতে চান তবে আপনি চালাতে পারেন:

rake db:migrate:redo

এটি যেমন:

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