ruby on rails - रेल डेटाबेस पर रूबी को पर्ज या रीजेट करें




ruby-on-rails ruby-on-rails-3 (12)

मेरे पास डेटा से भरा रेल डेटाबेस पर एक देव रूबी है। मैं सबकुछ हटाना चाहता हूं और डेटाबेस को पुनर्निर्माण करना चाहता हूं। मैं कुछ इस तरह का उपयोग करने के बारे में सोच रहा हूँ:

rake db:recreate

क्या यह संभव है?


अद्यतन: रेल 5 के आगमन के साथ, यह आदेश इस आदेश के माध्यम से सुलभ होगा:

रेल डीबी: शुद्ध डीबी: डीबी बनाएँ: RAILS_ENV = परीक्षण माइग्रेट करें

नवीनतम रेल 4.2 रिलीज के रूप में आप अब चला सकते हैं:

rake db:purge 

स्रोत: commit

# 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:reset उपयोग कर सकते हैं db:reset - रन डीबी के लिए: ड्रॉप और डीबी: सेटअप या db:migrate:reset - जो डीबी चलाता है: ड्रॉप, डीबी: बनाएं और डीबी: माइग्रेट करें।

आप पर निर्भर स्कीमा.आरबी का उपयोग करना चाहते हैं


आप निम्न कमांड लाइन का उपयोग कर सकते हैं:

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

आप मैन्युअल रूप से कर सकते हैं:

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

या बस rake db:reset , जो उपर्युक्त चरणों को चलाएगा लेकिन आपकी db/seeds.rb फाइल भी चलाएगा।

एक जोड़ा schema.rb यह है कि rake db:reset सभी माइग्रेशन फ़ाइलों को फिर से चलाने के विरोध में सीधे अपनी schema.rb फ़ाइल से rake db:reset लोड करें।

आप सभी मामलों में डेटा उड़ा दिया जाता है।


कमांड लाइन रन से

rake db:migrate:reset

क्योंकि विकास में, आप हमेशा डेटाबेस को फिर से बनाना चाहते हैं, आप अपने lib / कार्यों फ़ोल्डर में एक रेक कार्य को परिभाषित कर सकते हैं।

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

और टर्मिनल में आप भाग लेंगे

rake db:all

यह आपके डेटाबेस का पुनर्निर्माण करेगा


बस चरणों का अनुक्रम जारी करें: डेटाबेस ड्रॉप करें, फिर इसे दोबारा बनाएं, डेटा माइग्रेट करें, और यदि आपके पास बीज हैं, तो डेटाबेस बोएं:

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

चूंकि rake लिए डिफ़ॉल्ट वातावरण विकास है , यदि आप spec परीक्षणों में अपवाद देखते हैं, तो आपको परीक्षण वातावरण के लिए डीबी को फिर से बनाना चाहिए:

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

ज्यादातर मामलों में परीक्षण डेटाबेस परीक्षण प्रक्रियाओं के दौरान बोया जा रहा है, इसलिए db:seed कार्य कार्रवाई को पारित करने की आवश्यकता नहीं है। अन्यथा, आप डेटाबेस तैयार करना होगा:

rake db:test:prepare

या

RAILS_ENV=test rake db:seed

इसके अतिरिक्त, पुन: निर्माण कार्य का उपयोग करने के लिए आप निम्न कोड Rakefile में जोड़ सकते हैं:

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

मुझे ऐसा करने के दो तरीके पता हैं:

यह आपके डेटाबेस को रीसेट करेगा और आपकी वर्तमान स्कीमा को सभी के साथ पुनः लोड करेगा:

rake db:reset db:migrate

यह आपके डीबी को नष्ट कर देगा और फिर इसे बनाएगा और फिर अपनी वर्तमान स्कीमा माइग्रेट करेगा:

rake db:drop db:create db:migrate

दोनों परिदृश्यों में सभी डेटा खो जाएंगे।


मैं टर्मिनल में निम्नलिखित एक लाइनर का उपयोग करता हूं।

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

मैंने इसे एक शेल उपनाम के रूप में रखा और इसे नामित किया


मैंने आज अपने रेल स्कीमा में कुछ बदलाव किए हैं। मुझे एहसास हुआ कि मुझे पदानुक्रम में कुछ अतिरिक्त मॉडल की आवश्यकता है और कुछ अन्य को हटा दिया जाना चाहिए। मॉडल और नियंत्रकों के लिए बहुत कम बदलाव आवश्यक थे।

मैंने दो नए मॉडल जोड़े और इनका उपयोग करके:

rake db:migrate

तब मैंने schema.rb फ़ाइल संपादित की। मैंने उन पुराने मॉडलों को मैन्युअल रूप से हटा दिया जिन्हें अब आवश्यक नहीं था, आवश्यकतानुसार विदेशी कुंजी फ़ील्ड को बदल दिया और बस इसे स्पष्ट करने के लिए इसे थोड़ा सा किया। मैंने सभी माइग्रेशन हटा दिए, और उसके बाद निर्माण को फिर से चलाया:

rake db:reset

यह पूरी तरह से काम किया। बेशक, सभी डेटा को फिर से लोड किया जाना है। रेलों को एहसास हुआ कि माइग्रेशन हटा दिए गए हैं और उच्च पानी के निशान को रीसेट कर दिया गया है:

-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])


रेल गाइड के अनुसार, यह एक लाइनर का उपयोग किया जाना चाहिए क्योंकि यह माइग्रेशन फ़ाइलों को एक-एक करके पुनः लोड करने के बजाय schema.rb से लोड होगा:

rake db:reset




rake