কীভাবে রেল 3 এ মাইগ্রেশন ফাইলগুলি মুছবেন


109

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

এছাড়াও, আমি কোনও করণীয় করব db:resetবা db:dropআমি কোনও স্থানান্তর সরিয়ে / মুছলে?

উত্তর:


142

আমি সাধারণত:

  1. rake db:migrate VERSION=XXXআমি মুছে ফেলতে চাই তার আগে সংস্করণে সমস্ত পরিবেশে একটি সম্পাদন করুন ।
  2. মাইগ্রেশন ফাইলটি ম্যানুয়ালি মুছুন।
  3. যদি এখানে মুলতুবিকরণ মুলতুবি থাকে (যেমন, আমি যে স্থানান্তর সরিয়েছি তা শেষটি ছিল না), আমি কেবল rake db:migrateআবার একটি নতুন সম্পাদন করব ।

যদি আপনার অ্যাপ্লিকেশনটি ইতিমধ্যে উত্পাদন বা মঞ্চায় রয়েছে, কেবল আপনার টেবিল বা কলামগুলি নষ্ট করে এমন অন্য একটি মাইগ্রেশন লিখতে নিরাপদ।

মাইগ্রেশনগুলির জন্য আরেকটি দুর্দান্ত রেফারেন্স হ'ল: http://guides.rubyonrails.org/migrations.html


2
মাইগ্রেশন মুছে ফেলা হবে এবং তারপরে একটি ডিবি চালাবেন: মাইগ্রেট তৈরি করা সারণীটি মুছবেন?
alvincrespo

2
না, যেহেতু রেলগুলি কীভাবে এটি মুছতে হয় তা জানতেন না। self.downআপনার ডেটাবেসটিকে "ডাউনগ্রেড" করতে আপনার মাইগ্রেশনে সংজ্ঞায়িত পদ্ধতিটিকে কল করতে হবে ।
ফেবিও বাতিস্তা

35
যদি আপনি ইতিমধ্যে ফাইলটিকে মুছে ফেলে থাকেন তবে রেলগুলি উপলব্ধি না করে সহজেই তা যেতে দেয় না, rake db:migrate:statusআপনাকে হারিয়ে যাওয়া ফাইলের আইডি দেখাবে, যা আপনি এটি পুনরায় তৈরি করতে ব্যবহার করতে পারেন। ফিরে আসার পরে, আপনি এই উত্তরের জয়ের পরামর্শটি অনুসরণ করতে পারেন।
জর্ডান ফিল্ডস্টেইন

1
@ জোর্ডান ফিল্ডস্টাইন, আপনাকে ধন্যবাদ db:migrate:statusজীবন রক্ষাকারী!
ডি

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

68

মাইগ্রেশন মুছে ফেলার আরেকটি উপায়:

$ rails d migration SameMigrationNameAsUsedToGenerate

rake db:migrateমৃত্যুদন্ড কার্যকর হওয়ার আগে এটি ব্যবহার করুন কারণ ডাটাবেসে পরিবর্তনগুলি চিরকালই থাকবে :) - বা ম্যানুয়ালি পরিবর্তনগুলি সরান


3
"যদি আপনার অ্যাপ্লিকেশনটি ইতিমধ্যে উত্পাদন বা মঞ্চায় রয়েছে, কেবল আপনার টেবিল বা কলামগুলি নষ্ট করে এমন অন্য একটি মাইগ্রেশন লিখতে নিরাপদ" " সুতরাং পরিবর্তনগুলি চিরকালের জন্য ডাটাবেসে থাকে না
জনমারলিনো

8
যাইহোক, "ডি" এর অর্থ "ধ্বংস"।
গ্রেগ এম Krsak

21

অ্যাপের হোম ডিরেক্টরি থেকে কমান্ডগুলির নীচে চালান:

  1. rake db:migrate:down VERSION="20140311142212" (এখানে সংস্করণ হ'ল ট্রান্সমিশন হ'ল রেলগুলি যখন মাইগ্রেশন তৈরি হয়েছিল তখন এই পদক্ষেপটি এই মাইগ্রেশনের কারণে ডিবি পরিবর্তনগুলি ফিরিয়ে দেবে)

  2. Run "rails destroy migration migration_name"(মাইগ্রেশন তৈরি করার সময় মাইগ্রেশন_নামটি বেছে নেওয়া একটি ব্যবহার। এটি পেতে আপনার স্থানান্তর ফাইলের নাম থেকে " টাইমস্ট্যাম্প_ " সরান )


রেক মাইগ্রেশন ধ্বংস করুন অ্যাডফিটটোলেট টেক রাক বাতিল! কীভাবে 'বিনষ্ট' টাস্ক তৈরি করবেন তা জানেন না (--trace দিয়ে টাস্ক চালিয়ে সম্পূর্ণ ট্রেস দেখুন)
সাদাফ 2605

3
# 2 এর জন্য সঠিক আদেশটি হ'ল:rails d migration migration_name
মরিসিওমিডিয়া

1
আমার প্রয়োজন "টাইমস্ট্যাম্প_" মুছে ফেলার ইঙ্গিতের জন্য ধন্যবাদ
লাইটম্যান



3

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


3

এটিও রেল 5 এ কাজ করে।

মাইগ্রেশনটি যদি সর্বাধিক সাম্প্রতিক হয় তবে আপনি মাইগ্রেশনটি যোগ করে ডেটাবেস কলাম (গুলি) মুছে ফেলতে পারেন:

rake db:rollback

তারপরে মাইগ্রেশন ফাইলটি নিজেই চালিয়ে যান:

rails d migration WhateverYourMigrationWasNamed.rb 


1

যে উত্তরগুলি আমি মুছতে চাইছিলাম তা হ'ল এই উত্তরগুলির কোনওোটাই আমার সমস্যার সাথে খাপ খায় না: আমি অন্য কোনও শাখায় একটি মাইগ্রেশন তৈরি করে চালিয়েছিলাম, যা পরে বাতিল করা হয়েছিল। সমস্যাটি যখন কোনও মাইগ্রেশন চালানো হয় তখন রেলগুলি সংস্করণটি schema_migrationsডাটাবেসের একটি টেবিলের সাথে যুক্ত করে। সুতরাং এটি আপনার ডিবি কাঠামো বা স্কিমে তালিকাভুক্ত না হলেও, রেলগুলি এটির সন্ধান করে। আপনি চালিয়ে এই অনাথ মাইগ্রেশন প্রকাশ করতে পারেন:

rails db:migrate:status

অনুপস্থিত স্থানান্তরগুলির সংস্করণগুলি নোট করুন এবং ডিবি কনসোলে যান:

rails dbconsole

মাইগ্রেশন টেবিল থেকে ম্যানুয়ালি সংস্করণগুলি সরান:

delete from schema_migrations where version='<version>';

আপনার এখন ভাল হওয়া উচিত।


0

আমার ঠিক এই একই সমস্যা ছিল:

  1. রেল ডি মাইগ্রেশন ফু- এটি শেষ টাইমস্ট্যাম্প সহ স্থানান্তর মুছে ফেলে
  2. রেল ডি মাইগ্রেশন ফু- এটি অন্য মাইগ্রেশন মুছে ফেলেছে
  3. গিটারের স্ট্যাটাসটি পরীক্ষা করে দেখুন যে এটি আর টেস্টবিহীন ফাইলগুলিতে নেই
  4. রেল জি স্থানান্তর fuu

এটা আমার জন্য এটি স্থির


0

পার্শ্ব দ্রষ্টব্য: রেল 5.0.0 এ শুরু করে rakeপরিবর্তিত হয়েছে rails সুতরাং নিম্নলিখিতটি সম্পাদন করুন

রেল ডিবি: VERSION = 0 স্থানান্তর করুন ION

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