প্যালেস ডাটাবেসে রুবি পুনরুদ্ধার করুন বা পুনরায় তৈরি করুন


582

আমার কাছে ডেবি রুবি ডেটা পূর্ণ রেলে রয়েছে। আমি সবকিছু মুছে ফেলতে এবং ডাটাবেসটি পুনর্নির্মাণ করতে চাই। আমি এরকম কিছু ব্যবহার করার কথা ভাবছি:

rake db:recreate

এটা কি সম্ভব?


আমি সর্বাধিক উত্সাহিত উত্তরটি সন্ধান করার পরামর্শ দেব। আমার মতে এর rake db:drop db:create db:schema:loadচেয়ে বেশি উপযুক্ত হতে পারে rake db:drop db:create db:migrate(যদিও আমি সে সম্পর্কে ভুল হতে প্রস্তুত)।
জেসন সোয়েট



db:drop + db:create + db:migrate == db:migrate:reset। আমি সাধারণত অবলম্বন করি db:schema:loadযখন মাইগ্রেশনগুলি ভেঙে যায়। আমার খুব কমই ডাটাবেসটি পুনরায় তৈরি করা দরকার, তাই গতির পক্ষে খুব বেশি কিছু আসে না। এছাড়াও, যদি আপনার প্রয়োগ না করা মাইগ্রেশন থাকে db:schema:loadএবং db:resetসেগুলি প্রয়োগ না করে। নিশ্চিত না যে এটি অনেক যুক্তিযুক্ত কিনা।
এক্স-ইউরি

উত্তর:


1074

আমি এটি করার দুটি উপায় জানি:

এটি আপনার ডাটাবেসটিকে পুনরায় সেট করবে এবং আপনার বর্তমান স্কিমা সবার সাথে পুনরায় লোড করবে:

rake db:reset db:migrate

এটি আপনার ডিবি ধ্বংস করবে এবং তারপরে এটি তৈরি করবে এবং তারপরে আপনার বর্তমান স্কিমা স্থানান্তর করবে:

rake db:drop db:create db:migrate

সমস্ত ডেটা উভয় পরিস্থিতিতে হারিয়ে যাবে।


36
rake db:resetএটিও মনে হয় সমস্ত স্থানান্তর চলছে (কমপক্ষে রেল 3 এ), তাই যা প্রয়োজন তা হ'ল তাই না?
plindberg

1
বা, বরং, এটি সমস্ত মাইগ্রেশন যা চালায় তার অনুরূপ স্কিমা ছেড়ে দেয়। তবে মাইগ্রেশনগুলি প্রতি সেটে চালানো হয় না (সুতরাং আপনার যদি মাইগ্রেশন থাকে যা তথ্য সন্নিবেশ করে তবে তা ঘটবে না; এর জন্য আপনার সত্যিকার অর্থে ডিবি / বীজ.আরবি ফাইল ব্যবহার করা উচিত)।
plindberg

1
আমি জানি যে ট্র্যাকস জিটিডি অ্যাপ্লিকেশন ডিবির জন্য: মাইগ্রেট কার্যকর হয়নি। আমাকে ডিবি করতে হয়েছিল: স্ক্লাইট 3 থেকে পোস্টগ্র্রেসে যাওয়ার সময় পুনরায় সেট করুন।
গোলকধাঁধা

11
rake db:test:prepareCould not find table 'things' (ActiveRecord::StatementInvalid)
আপনাকেও

31
কারও উচিত এটি পরিষ্কার করে দেওয়া rake db:resetএবং rake db:drop db:create db:migrate পুরো দুটি ভিন্ন জিনিস করা উচিত । পরেরটি পুরো অ্যাপ্লিকেশন ডাটাবেসটি মুছে ফেলে, এটিকে পুনরায় তৈরি করে এবং তারপরে স্কাইমা ( db/schema.rbবা db/structure.sql) আপডেট করার জন্য প্রতিটি মাইগ্রেশন দিয়ে যায় তবে এটি বীজ ডেটা দিয়ে পূরণ করে না। পরিবর্তে প্রথমটি হ'ল একটি উপাধি rake db:drop db:schema:load db:seed, সুতরাং এটি পুরো অ্যাপ্লিকেশন ডেটাবেসটি মুছে ফেলে তবে এটি স্কিমা আপডেট করে না এবং এরপরে বীজের ডেটা দিয়ে পপুলেটে। সুতরাং, আপনি যদি নিজের মাইগ্রেশনে কোনও পরিবর্তন না করেন তবে প্রথমটি দ্রুততর হয়, দ্বিতীয়টি আরও নিরাপদ।
ক্লোদিও ফ্লোরানি

157

4 রেলগুলিতে, সমস্ত প্রয়োজন

$ rake db:schema:load

এটি আপনার ডিবিতে সম্পূর্ণ সামগ্রী মুছে ফেলবে এবং আপনার স্কিমা.আরবি ফাইল থেকে স্কিমাটি পুনরায় তৈরি করবে, সমস্ত মাইগ্রেশন একের পর এক প্রয়োগ না করে।


6
3 রেল হিসাবে কাজ করে। যখন আপনি সবেমাত্র আপনার পরীক্ষার ডাটাবেস
গোলমাল করে ফেলেছেন

এর জন্য ধন্যবাদ. আমি তা বুঝতে পারি নি db:dropএবং db:createঅপ্রয়োজনীয় ছিলাম ।
গ্রান্ট বার্চমিয়ার

3
এটি স্কিমা আপডেট করে না, আপনি যদি নিজের মাইগ্রেশনগুলিকে সংশোধন করেন তবে এটি নিরাপদ উপায় নয়।
ক্লাদিও ফ্লোরানি

এটি আমার পক্ষে সেরা উত্তর।
রোকসডুজারো

2
ক্লাউডিওফ্লোরিয়ান রিফ্যাক্টরিং মাইগ্রেশনগুলি সমস্যা জিজ্ঞাসা করছে। একবার চালানোর পরে এগুলি স্থায়ীভাবে একা রাখা উচিত।
নরোজিট

45

টার্মিনালে আমি নীচের একটি লাইনার ব্যবহার করি।

$ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare

আমি এটি শেল ওরফে হিসাবে রেখেছি এবং নাম দিয়েছি remigrate

এখনই, আপনি সহজেই "চেইন" রেলের কাজগুলি করতে পারেন:

$ rake db:drop db:create db:migrate db:schema:dump db:test:prepare # db:test:prepare no longer available since Rails 4.1.0.rc1+

12
এটি আপনার সমস্ত স্থানান্তর একের পর এক চালাচ্ছে যা স্কেলযোগ্য নয় এবং ত্রুটি-প্রবণ। এছাড়াও, আমি বেশ নিশ্চিত ডিবি: মাইগ্রেট করে আপনার স্কিমা.আরবি আপডেট করে, তাই আপনার স্কিমা: ডাম্প কোনও কার্যকর করছে না।
কোরওয়্যার্ড

সুতরাং কিভাবে একটি ডাটাবেস খালি? বিকাশে ... সব পরিষ্কার করে দাও।
অ্যানপ্রেন্টিস

3
@ অ্যানপ্রেন্টিস আপনি চালাতে পারবেন db:reset, যা কেবল গুগল (বা গাইডগুলিতে চেক করুন ) away আমার মন্তব্যটি এটিকে ব্যবহার করার বিরুদ্ধে পরামর্শ দেওয়ার জন্য নয়, db:migrateআপনি যখন যা চান তা ব্যবহার করা এড়াতে db:schema:load
মূলত

7
যাইহোক, @ টি কে, আপনাকে শেষের প্রস্থান স্থিতির উপর নির্ভর করে পৃথক প্রক্রিয়া হিসাবে সত্যই এগুলি চালানোর দরকার নেই। পরিবর্তে, শুধু মোটেই কাম্য কর্ম পাস rake, তাই মত: rake db:drop db:create db:schema:load
মূলত

1
এটি কৌতুকপূর্ণ, তবে আমার কোনও সমস্যা চলছিল না db:migrate... তবে db:schema:loadকেউ নতুন মাইগ্রেশনের পাশাপাশি সংস্করণ নিয়ন্ত্রণে স্কিমা.আরবি পরীক্ষা করতে ভুলে যাওয়া সম্পর্কে সংবেদনশীল।
জনসিপ

37

আপডেট: 5 রেলগুলিতে, এই আদেশটি এই আদেশের মাধ্যমে অ্যাক্সেসযোগ্য হবে:

rails db:purge db:create db:migrate RAILS_ENV=test


4.2 রিলিজ সর্বাধিক নতুন রেল হিসাবে আপনি এখন চালাতে পারবেন:

rake db:purge 

উত্স: প্রতিশ্রুতিবদ্ধ

# desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV it defaults to purging the development and test databases."
  task :purge => [:load_config] do
    ActiveRecord::Tasks::DatabaseTasks.purge_current
  end

এটি উপরে উল্লিখিত মত একসাথে ব্যবহার করা যেতে পারে:

rake db:purge db:create db:migrate RAILS_ENV=test

@ বিবিকোট যেমন সরল ইংরেজীতে বলেছেন db:purge"সমস্ত ডেটা সরিয়ে ফেলুন তবে সমস্ত টেবিল এবং কলামগুলি সংরক্ষণ করুন"
MCB

@ এমসিবির আমি ভুল ছিলাম, এ সম্পর্কে দুঃখের বিষয়, db:purge তিনি টেবিলগুলি সংরক্ষণ করছেন না।
ইয়ানা আগুন সিসওয়ান্তো

29

আপনি যা চাইছেন তার উপর নির্ভর করে আপনি ...

rake db:create

… থেকে স্ক্র্যাচ থেকে ডাটাবেস তৈরি করতে config/database.yml, বা…

rake db:schema:load

… আপনার schema.rbফাইল থেকে স্ক্র্যাচ থেকে ডাটাবেস তৈরি করতে ।


1
আপনাকে প্রথমে ডাটাবেসটি ফেলে দিতে হবে ... বা আপনি যদি পছন্দ করেন তবে সারণীগুলি মুছতে পারেন।
কোরওয়্যার্ড

5
স্কিমা লোডের জন্য +1। কখনও কখনও স্থানান্তর বিড়বিড় হয়, কিন্তু স্কিমাটি অক্ষত রাখা উচিত।
ড্যানি

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

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

13

কমান্ড লাইন থেকে রান

rake db:migrate:reset

এই একমাত্র উপায় যা অ্যাপ্লিকেশনটিকে সমস্ত মাইগ্রেশন আবার চালাতে সক্ষম করে। কারণ প্রতিটি মাইগ্রেশন পরিবর্তনগুলি করে schema.rbএবং যদি আপনি কেবল dropএবং create, migrateকিছুই করেন না (rail রেলের পরীক্ষায়)
শ্যাম্পু

12

মত ব্যবহার করুন

rake db:drop db:create db:migrate db:seed

সব এক লাইনে। পরিবেশটি বার বার পুনরায় লোড না হওয়ায় এটি দ্রুত।

db: ড্রপ - ড্রপ ডাটাবেস হবে।

ডিবি: তৈরি - ডাটাবেস তৈরি করবে (হোস্ট / ডিবি / পাসওয়ার্ড কনফিগারেশন / ডাটাবেস থেকে নেওয়া হবে)

ডিবি: মাইগ্রেট - ডিরেক্টরি (ডিবি / মাইগ্রেশন / .rb) * থেকে বিদ্যমান মাইগ্রেশন চালাবে।

ডিবি: বীজ - ডিরেক্টরি থেকে সম্ভাব্য বীজ ডেটা চালাবে (ডিবি / মাইগ্রেশন / সিড.আরবি) ..

আমি সাধারণত পছন্দ করি:

rake db:reset

একবারে সব করতে।

চিয়ার্স!


1
আমি ডিবি যোগ করতে চাই: পরীক্ষা: ভাল পরিমাপের জন্য এটি প্রস্তুত করুন। এটি অবশ্যই আপনি পরীক্ষা করছেন কিনা তা নির্ভর করে।
সিটিসি

db:reset == db:drop + db:schema:load + db:seed,db:migrate:reset == db:drop + db:create + db:migrate
x-yuri

11

কেবলমাত্র পদক্ষেপগুলির ক্রম ইস্যু করুন: ডাটাবেসটি ফেলে দিন, আবার এটি পুনরায় তৈরি করুন, ডেটা মাইগ্রেট করুন এবং আপনার বীজ থাকলে ডাটাবেস বপন করুন:

rake db:drop db:create db:migrate db:seed

যেহেতু ডিফল্ট পরিবেশটি উন্নয়নrake হ'ল যদি আপনি নির্দিষ্ট পরীক্ষাগুলিতে ব্যতিক্রমটি দেখেন তবে আপনার নীচের হিসাবে পরীক্ষার পরিবেশের জন্য আবার ডিবি তৈরি করা উচিত :

RAILS_ENV=test rake db:drop db:create db:migrate

বেশিরভাগ ক্ষেত্রে পরীক্ষার প্রক্রিয়া চলাকালীন পরীক্ষার ডাটাবেস বপন করা হয়, সুতরাং db:seedটাস্ক অ্যাকশনটি পাস করার প্রয়োজন হয় না। অন্যথায়, আপনি ডাটাবেস প্রস্তুত করতে হবে:

rake db:test:prepare

অথবা

RAILS_ENV=test rake db:seed

অতিরিক্তভাবে, পুনঃনির্মাণ টাস্কটি ব্যবহার করতে আপনি নিম্নলিখিত কোডটি রেকফাইলে যুক্ত করতে পারেন :

namespace :db do
   task :recreate => [ :drop, :create, :migrate ] do
      if ENV[ 'RAILS_ENV' ] !~ /test|cucumber/
         Rake::Task[ 'db:seed' ].invoke
      end
   end
end

তারপরে ইস্যু করুন:

rake db:recreate

8

আপনি ম্যানুয়ালি করতে পারেন:

rake db:drop
rake db:create
rake db:migrate

বা কেবল rake db:reset, যা উপরের পদক্ষেপগুলি চালাবে তবে আপনার db/seeds.rbফাইলটিও চালাবে ।

একটি যুক্ত উপায়ে হ'ল সমস্ত মাইগ্রেশন ফাইলগুলি আবার চালানোর বিপরীতে rake db:resetসরাসরি আপনার schema.rbফাইল থেকে লোড হয়।

আপনার ডেটা সব ক্ষেত্রেই ফুরিয়ে যায়।


6

আপনি নিম্নলিখিত কমান্ড লাইনটি ব্যবহার করতে পারেন:

rake db:drop db:create db:migrate db:seed db:test:clone

4

একটি নির্দিষ্ট ডাটাবেস ড্রপ করতে, আপনি রেল কনসোল এ এটি করতে পারেন:

$rails console
Loading development environment
1.9.3 > ActiveRecord::Migration.drop_table(:<table_name>)
1.9.3 > exit

এবং তারপরে আবার ডিবি স্থানান্তর করুন

$bundle exec rake db:migrate 

4

4.2 রেলগুলিতে, সমস্ত ডেটা সরিয়ে ফেলতে কিন্তু ডাটাবেস সংরক্ষণ করতে

$ bin/rake db:purge && bin/rake db:schema:load

https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md


ঠিক আছে ... এটি চেষ্টা করে দেখুন তবে এটি সারণী এবং কলাম সংরক্ষণ করে না। আপনার একটি db চালাতে হবে: db: purge চালানোর পরে স্থানান্তর করুন। সুতরাং এটি সারণী এবং কলামগুলি সংরক্ষণ করে না। এটি ডাটাবেসটি নিজেই সংরক্ষণ করে যাতে আপনার ডিবি করতে হবে না: তৈরি করুন
ফ্রেডডো

1
@ সিড্রিক আপনি ঠিক বলেছেন, ডিবি: শুদ্ধি টেবিল সংরক্ষণ করা হয় না। আমি কোড আপডেট করেছি।
ইয়ানা আগুন সিসওয়ান্তো

3

আপনি ব্যবহার করতে পারেন db:reset- রান ডিবি: ড্রপ এবং ডিবি: সেটআপ বা db:migrate:reset- যা চালায় ডিবি: ড্রপ, ডিবি: তৈরি এবং ডিবি: মাইগ্রেট।

আপনার উপর নির্ভর করে বিদ্যমান অস্তিত্ব স্কিমা.আরবি ব্যবহার করতে চান


2

রেল গাইড অনুসারে , এই একটি লাইনার ব্যবহার করা উচিত কারণ এটি schema.rbমাইগ্রেশন ফাইলগুলি একে একে পুনরায় লোড করার পরিবর্তে লোড করা হবে :

rake db:reset

1

কারণ বিকাশে, আপনি সর্বদা ডাটাবেসটি পুনরায় তৈরি করতে চাইবেন, আপনি আপনার লাইব / টাস্ক ফোল্ডারে একটি রেক টাস্কটিকে সংজ্ঞায়িত করতে পারেন।

  namespace :db do
      task :all => [:environment, :drop, :create, :migrate] do
   end 
end

এবং টার্মিনালে আপনি চালানো হবে

rake db:all

এটি আপনার ডাটাবেসটিকে পুনর্নির্মাণ করবে


1

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

**rake db:reset** it does db:drop, db:setup
 rake db:setup does db:create, db:schema:load, db:seed

1

সহজভাবে আপনি চালাতে পারেন

rake db:setup

যদি আপনি কিছু ডেটা দিয়ে বীজ ফাইল তৈরি করেন তবে এটি ডাটাবেস ছাড়বে, নতুন ডাটাবেস তৈরি করবে এবং বীজ থেকে ডিবি তৈরি করবে।


1

3 টি বিকল্প, একই ফলাফল:

1. সমস্ত পদক্ষেপ:

  $ rake db:drop           # deletes the database for the current env
  $ rake db:create         # creates the database for the current env
  $ rake db:schema:load    # loads the schema already generated from schema.rb / erases data
  $ rake db:seed           # seed with initial data

2. পুনরায় সেট করুন:

  $ rake db:reset          # drop / schema:load / seed

3. স্থানান্তর: পুনরায় সেট করুন:

  $ rake db:migrate:reset  # drop / create / migrate
  $ rake db:seed

মন্তব্য:

  • যদি স্কিমা: লোড ব্যবহৃত হয় তবে সমস্ত মাইগ্রেশন করার চেয়ে দ্রুত হয় তবে একই ফলাফল।
  • সমস্ত ডেটা হারিয়ে যাবে।
  • আপনি এক লাইনে একাধিক রাক চালাতে পারেন।
  • রেল 3 সঙ্গে কাজ করে।

0

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

আমি দুটি নতুন মডেল যুক্ত করেছি এবং এগুলি ব্যবহার করে তৈরি করেছি:

rake db:migrate

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

rake db:reset

এটি পুরোপুরি কাজ করেছে। অবশ্যই সমস্ত ডেটা অবশ্যই লোড করতে হবে। রেলগুলি বুঝতে পেরেছিল যে স্থানান্তরগুলি মুছে ফেলা হয়েছে এবং উচ্চ-জলের চিহ্নটি পুনরায় সেট করা হয়েছে:

-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.