রেক ডিবি: মাইগ্রেট ডিবি: রিসেট এবং ডিবি: স্কিমা: লোডের মধ্যে পার্থক্য


619

মধ্যে পার্থক্য rake db:migrateএবং rake db:resetআমার মাথা চমত্কার স্পষ্ট। আমি যে জিনিসটি বুঝতে পারি না তা হ'ল rake db:schema:loadআগের দু'জনের থেকে আলাদা।

আমি নিশ্চিত হয়েছি যে আমি একই পৃষ্ঠায় আছি:

  • rake db:migrate - মাইগ্রেশন চালায় যা এখনও চালানো হয়নি।
  • rake db:reset- মুছে ফেলা হবে ডেটাবেস (সম্ভবতঃ একটি করে rake db:drop+ + rake db:create+ + rake db:migrateএকটি তাজা ডাটাবেসের উপর এবং রান মাইগ্রেশন)।

আমার বুঝতে ভুল হয়ে গেলে দয়া করে পরিষ্কার করতে সহায়তা করুন।


10
নেই rake --tasksসহায়তা প্রয়োজন?
zx1986

আপনার এই ব্লগটি পরীক্ষা করা উচিত। jacopretorius.net/2014/02/…
বিশিষ্ট ভট্ট

আপনার বোঝাপড়াটি rake db:migrateসঠিক, তবে আপনার উপলব্ধিটি rake db:resetভুল। মরিজ থেকে প্রাপ্ত শীর্ষস্থানীয় উত্তরটি দেখুন।
ম্যাগনে

1
BTW, পাগল 5 যেমন এসব কমান্ড যেন বরকত যাবে rails db:migrate, rails db:reset, rails db:schema:load। দেখুন stackoverflow.com/questions/38403533/...
Purplejacket

উত্তর:


1303
  • db: স্থানান্তরিত রান (একক) স্থানান্তর যা এখনও চালায় নি।
  • ডিবি: তৈরি ডেটাবেস তৈরি করে
  • ডিবি: ড্রপ ডাটাবেস মুছে দেয়
  • ডিবি: স্কিমা: লোড নিম্নলিখিত (বিদ্যমান) ডাটাবেসের মধ্যে স্কিমা.আরবিতে টেবিল এবং কলাম তৈরি করে

  • ডিবি: সেটআপ ডিবি: তৈরি, ডিবি: স্কিমা: লোড, ডিবি: বীজ

  • ডিবি: রিসেট ডিবি: ড্রপ, ডিবি: সেটআপ করে
  • ডিবি: মাইগ্রেট: রিসেট ডিবি: ড্রপ, ডিবি: তৈরি, ডিবি: মাইগ্রেট করুন

সাধারণত, আপনি db ব্যবহার করবেন: নতুন মাইগ্রেশন ফাইলের মাধ্যমে স্কিমে পরিবর্তন করার পরে স্থানান্তর করুন (এটি ডাটাবেসে ইতিমধ্যে ডেটা থাকলেই বোঝা যায়)। ডিবি: স্কিমা: লোড ব্যবহৃত হয় যখন আপনি আপনার অ্যাপ্লিকেশনটির একটি নতুন উদাহরণ সেটআপ করেন।

আমি আশা করি এটি সাহায্য করবে.


3.2.12 রেলের জন্য আপডেট করুন:

আমি কেবল উত্সটি পরীক্ষা করেছি এবং নির্ভরতা এখন এইরকম:

  • ডিবি: তৈরি বর্তমান এনভির জন্য ডেটাবেস তৈরি করে
  • ডিবি: তৈরি: সমস্ত এনভির জন্য ডেটাবেস তৈরি করে
  • ডিবি: বর্তমান এনভির জন্য ডাটাবেস ড্রপ ড্রপ
  • ডিবি: ড্রপ: সমস্ত এনভির জন্য সমস্ত ডাটাবেস ড্রপ করে
  • ডিবি: মাইগ্রেট বর্তমান এনভির জন্য মাইগ্রেশন চালায় যা এখনও চালায় নি
  • ডিবি: মাইগ্রেট: আপ একটি নির্দিষ্ট মাইগ্রেশন চালায়
  • ডিবি: মাইগ্রেট: ডাউন একটি নির্দিষ্ট মাইগ্রেশন পিছনে রোলস
  • ডিবি: মাইগ্রেট: স্থিতি বর্তমান মাইগ্রেশন অবস্থা দেখায়
  • ডিবি: রোলব্যাক শেষ মাইগ্রেশনে ফিরে আসে
  • ডিবি: ফরোয়ার্ড বর্তমান স্কিমা সংস্করণকে পরবর্তীটিতে অগ্রসর করে
  • ডিবি: বীজ (কেবল) ডিবি / সিড.আরবি ফাইল চালায়
  • ডিবি: স্কিমা: স্কিমাটি বর্তমান এনভির ডেটাবেজে লোড করে
  • ডিবি: স্কিমা: ডাম্পগুলি বর্তমান এনভির স্কিমাগুলি ফেলে দেয় (এবং এটি ডিবিও তৈরি করে বলে মনে হয়)

  • ডিবি: সেটআপ চালায় ডিবি: স্কিমা: লোড, ডিবি: বীজ

  • ডিবি: রিসেট চালায় ডিবি: ড্রপ ডিবি: সেটআপ
  • db: স্থানান্তর: পুনরায় রান (db: স্থানান্তর: ডাউন db: স্থানান্তর: আপ) বা (db: রোলব্যাক db: স্থানান্তর) নির্দিষ্ট স্থানান্তরের উপর নির্ভর করে
  • ডিবি: মাইগ্রেট: রিসেট চালায় ডিবি: ড্রপ ডিবি: তৈরি ডিবি: মাইগ্রেট

আরও তথ্যের জন্য দয়া করে https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/datedias.rake (রেলগুলির জন্য 3.2.x) এবং https: // গিথুব দেখুন .কম / রেল / রেল / ব্লব / ভি 4.0.5 / অ্যাক্টিভেটকার্ড / লিব / অ্যাক্টিভ_রেকার্ড / রেলটি / ডাটাবেস.রেকে (রেল 4.0.x এর জন্য)


16
উত্তর সহ ফাইলটি এখানে রয়েছে :) - github.com/rails/rails/blob/master/activerecord/lib/…
কাটালিয়ন

3
@ শিরোনাম: ডিবি: সেটআপ অবশ্যই ডিবি চালায় না: মাইগ্রেট করা, কারণ কেবলমাত্র একটি ডিবি সেটআপের জন্য সমস্ত মাইগ্রেশন চালানো অনেকটা ভঙ্গুর হবে (এটি স্কিমা.আরবি এর জন্য)।
মরিৎজ

2
আমি ডিবি চালাচ্ছি: রিসেট করুন এবং এটি আমার ডিবি বপন করছে। কেন এটা হতে পারে?
আলেজান্দ্রো রিডেল

ডিবি:db:create প্রয়োজনে সেটআপও চলে । কমপক্ষে রেল হিসাবে 4.0.0।
ড্যান

মুলতুবিকরণ মুলতুবি থাকা rake db:migrateঅবস্থায় কল করার সময় 4 টি রেল সম্পাদন করবে rake db:setupতবে মুলতুবি মাইগ্রেশনগুলি কার্যকর করবে না ute
পুয়ান খোসরাভি

24

TLDR

ব্যবহার

  • rake db:migrate আপনি যদি স্কিমা পরিবর্তন করতে চান
  • rake db:resetআপনি যদি ডাটাবেসটি ছাড়তে চান তবে স্কিমাটি পুনরায় লোড করুন schema.rbএবং ডাটাবেসটি পুনরায় পুনরায় পরীক্ষা করুন
  • rake db:schema:loadযদি আপনি প্রদত্ত স্কিমায় ডাটাবেসটিকে পুনরায় সেট করতে চান তবে schema.rb(এটি সমস্ত ডেটা মুছে ফেলবে)

ব্যাখ্যা

rake db:schema:loadschema.rbফাইল হিসাবে সরবরাহিত স্কিমা সেট আপ করবে । এটি নতুন অ্যাপ্লিকেশন ইনস্টলের জন্য কার্যকর কারণ এটি যতটা সময় নেয় নাdb:migrate

গুরুত্বপূর্ণ নোট, সার্ভারের ডেটা মুছেdb:schema:load ফেলবে ।

rake db:migrateবিদ্যমান স্কিমা পরিবর্তন করে। এটি স্কিমার সংস্করণ তৈরির মতো। db:migrateযে db/migrate/কোনও রুবি ফাইল সন্ধান করবে এবং মাইগ্রেশনগুলি চালিত করবে যা এখনও প্রাচীনতম দিয়ে শুরু হয় না। মাইগ্রেশন ফাইলনামের শুরুতে টাইমস্ট্যাম্পটি দেখে কোন ফাইলটি সবচেয়ে পুরনো তা রেলগুলি জানে। db:migrateডেটাবেসে ডাটাও রাখা যেতে পারে এমন একটি সুবিধা নিয়ে আসে। এটি আসলে কোনও ভাল অনুশীলন নয়। rake db:seedডেটা যুক্ত করার জন্য এটি ব্যবহার করা আরও ভাল ।

rake db:migrateকর্ম উপলব্ধ আপ , ডাউন ইত্যাদি যা মত কমান্ড সম্ভব rake db:rollbackএবং এটি সবচেয়ে দরকারী কমান্ড করে তোলে।

rake db:resetএকটি করে db:dropএবং db:setup
এটি ডাটাবেস ড্রপ করে, আবার এটি তৈরি করে, স্কিমা লোড করে এবং বীজ ডেটা দিয়ে সূচনা করে

Databases.rake থেকে কমান্ডের প্রাসঙ্গিক অংশ


namespace :schema do
  desc 'Creates a db/schema.rb file that is portable against any DB supported by Active Record'
  task :dump => [:environment, :load_config] do
    require 'active_record/schema_dumper'
    filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, 'schema.rb')
    File.open(filename, "w:utf-8") do |file|
      ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
    end
    db_namespace['schema:dump'].reenable
  end

  desc 'Loads a schema.rb file into the database'
  task :load => [:environment, :load_config, :check_protected_environments] do
    ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:ruby, ENV['SCHEMA'])
  end

  # desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
  task :reset => [ 'db:drop', 'db:setup' ]

namespace :migrate do
  # desc  'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
  task :redo => [:environment, :load_config] do
    if ENV['VERSION']
      db_namespace['migrate:down'].invoke
      db_namespace['migrate:up'].invoke
    else
      db_namespace['rollback'].invoke
      db_namespace['migrate'].invoke
    end
  end

সুতরাং আপনি যদি ডিবি: স্কিমা: লোড (আগের মাইগ্রেশনগুলির একটি সিরিজ থেকে তৈরি) ব্যবহার করে আপনার উত্পাদন স্কিমা তৈরি করেন তবে তা জানতে পারবে কোন স্থানান্তর (প্রাথমিক স্কিমা.আরবি তৈরির ক্ষেত্রে অংশ নেওয়া) ভবিষ্যতে চালানোর দরকার নেই? ডিবির অনুরোধ: স্থানান্তর?
কানাডাআইটি

2

আমি যতদূর বুঝতে পেরেছি এটি আপনার ডাটাবেসটি ফেলে দেবে এবং এটি আপনার db/schema.rbফাইলের উপর ভিত্তি করে পুনরায় তৈরি করবে । এজন্য আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার schema.rbফাইলটি সর্বদা আপ টু ডেট এবং সংস্করণ নিয়ন্ত্রণে রয়েছে।


0

আপনি কেবল অ্যাক্টিভ রেকর্ড রেক কার্যগুলিতে সন্ধান করতে পারেন কারণ আমি বিশ্বাস করি তারা এই ফাইলে যেমন বাস করে। https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb

তারা কি করে আপনার প্রশ্নটি সঠিক?

এগুলি নির্ভর করে যে তারা কোথা থেকে এসেছে এবং এটি সঠিক এবং উদাহরণ হিসাবে দেখাতে পারে যে তারা কাজের উপর নির্ভর করে আলাদা হয়। এখানে আমাদের কাছে একটি সম্পূর্ণ ফাইল রয়েছে যা সম্পূর্ণ পূর্ণ।

https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile

যা এই কাজ আছে।

namespace :db do
  task create: ["db:mysql:build", "db:postgresql:build"]
  task drop: ["db:mysql:drop", "db:postgresql:drop"]
end

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


নিবন্ধটি সরিয়ে ফেলার ক্ষেত্রে দয়া করে প্রাসঙ্গিক অংশগুলি উদ্ধৃত করুন। কেন ব্যাখ্যা না করে কিছু করার পরামর্শ দিবেন না।
ফিল্ট

0

5 কারাগারের জন্য আপডেট:

db:create- বর্তমানের RAILS_ENV পরিবেশের জন্য ডাটাবেস তৈরি করে । যদি RAILS_ENV নির্দিষ্ট না করা থাকে তবে এটি ডেভলপমেন্ট এবং টেস্ট ডেটাবেজে ডিফল্ট হয়।

db:create:all - সমস্ত পরিবেশের জন্য ডাটাবেস তৈরি করে।

db:drop- বর্তমানের RAILS_ENV পরিবেশের জন্য ডাটাবেসটি ড্রপ করে । যদি RAILS_ENV নির্দিষ্ট না করা থাকে তবে এটি ডেভলপমেন্ট এবং টেস্ট ডেটাবেজে ডিফল্ট হয়।

db:drop:all - সমস্ত পরিবেশের জন্য ডাটাবেস ড্রপ।

db:migrate- বর্তমান পরিবেশের জন্য মাইগ্রেশন চালায় যা এখনও চালিত হয়নি। ডিফল্টরূপে এটি কেবলমাত্র উন্নয়নের পরিবেশে মাইগ্রেশন চালাবে।

db:migrate:redo- চালিত ডিবি: মাইগ্রেট: ডাউন এবং ডিবি: মাইগ্রেট: আপ বা ডিবি: মাইগ্রেট: রোলব্যাক এবং ডিবি: মাইগ্রেট: নির্দিষ্ট মাইগ্রেশনের উপর নির্ভর করে

db:migrate:up - প্রদত্ত স্থানান্তর সংস্করণটির জন্য আপ রান করে।

db:migrate:down - প্রদত্ত স্থানান্তর সংস্করণটির জন্য ডাউন ডাউন চালায়।

db:migrate:status - বর্তমান স্থানান্তর স্থিতি প্রদর্শন করে।

db:migrate:rollback - শেষ মাইগ্রেশন রোলস।

db:version - বর্তমান স্কিমা সংস্করণ মুদ্রণ।

db:forward - পরবর্তী সংস্করণে স্কিমাটি পুশ করে।

db:seed- ডিবি / বীজ.আরবি ফাইল চালায়

db:schema:loadস্কিমা.আরবি ফাইল থেকে ডাটাবেস পুনরুদ্ধার করে

db:schema:dumpবর্তমান পরিবেশের স্কিমাটি ডিবি / স্কিমা.আরবিতে ফেলে দেয়

db:structure:load- recreates থেকে ডাটাবেসের structure.sql ফাইল।

db:structure:dump- বর্তমান পরিবেশের স্কিমাটি ডিবি / কাঠামো.এসকিউএল-এ ফেলে দেয় । (আপনি এর সাথে অন্য একটি ফাইল নির্দিষ্ট করতে পারেন SCHEMA=db/my_structure.sql)

db:setupচালিত ডিবি: তৈরি , ডিবি: স্কিমা: লোড এবং ডিবি: বীজ

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

db:test:prepare- মুলতুবি থাকা মাইগ্রেশনগুলির জন্য পরীক্ষা করুন এবং পরীক্ষা স্কিমা লোড করুন। (আপনি যদি কোনও যুক্তি ছাড়াই রেক চালান তবে এটি ডিফল্টরূপে এটি করবে))

db:test:clone - বর্তমান পরিবেশের ডাটাবেস স্কিমা থেকে পরীক্ষা ডাটাবেস পুনরুদ্ধার করুন।

db:test:clone_structure- ডিবি: পরীক্ষার অনুরূপ : ক্লোন , তবে এটি নিশ্চিত করবে যে আপনার পরীক্ষার ডাটাবেসের একই কাঠামো রয়েছে যা আপনার বর্তমান পরিবেশের ডেটাবেস হিসাবে চরসেট এবং কোলিশেশন সহ।

db:environment:set- আরএইন্টার্নাল_মেডাটাটা টেবিলে বর্তমান RAILS_ENV পরিবেশ সেট করুন । (সুরক্ষিত পরিবেশ পরীক্ষার অংশ হিসাবে ব্যবহৃত হয় Used)

db:check_protected_environments- বর্তমানের RAILS_ENV পরিবেশে কোনও ধ্বংসাত্মক ক্রিয়া সম্পাদন করা যায় কিনা তা পরীক্ষা করে দেখুন। একটি ধ্বংসাত্মক ক্রিয়া যেমন db: ড্রপ বা ডিবি: স্কিমা: লোড চলাকালীন অভ্যন্তরীণভাবে ব্যবহৃত হয় ।

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