Komisyon db: migrate db: reset ve db: şema: yük arasındaki fark


619

Başımdaki rake db:migrateve arasındaki fark rake db:resetoldukça açık. Anlamadığım şey rake db:schema:load, önceki ikisinden ne kadar farklı olduğudur.

Aynı sayfada olduğumdan emin olmak için:

  • rake db:migrate - Henüz yapılmayan taşıma işlemlerini gerçekleştirir.
  • rake db:reset- Veritabanını temizler (muhtemelen bir rake db:drop+ rake db:create+ yapar rake db:migrate) ve yeni bir veritabanında taşıma işlemini gerçekleştirir.

Anlayışım yanlış gittiğinde lütfen açıklığa kavuşturun.


10
Yardımcı rake --tasksolur mu?
zx1986

Bu blogu kontrol etmelisiniz. jacopretorius.net/2014/02/…
Bishisht Bhatta

Anlayışınız rake db:migratedoğru, ancak anlayışınız rake db:resetyanlış. Moritz'in en üstteki cevabına bakın.
Magne

1
BTW, Raylar 5 olarak, bu komutlar olarak getirilebilir rails db:migrate, rails db:reset, rails db:schema:load. Bkz. Stackoverflow.com/questions/38403533/…
Purplejacket

Yanıtlar:


1303
  • db: migrate henüz çalışmayan (tek) çalıştırmaları taşır.
  • db: create veritabanı oluşturur
  • db: drop veritabanını siler
  • db: schema: load (varolan) veritabanında schema.rb'yi izleyen tablolar ve sütunlar oluşturur

  • db: kurulum yapar db: oluştur, db: şema: yük, db: tohum

  • db: sıfırlama yapar db: bırak, db: kurulum
  • db: migrate: reset yapar db: drop, db: create, db: migrate

Genellikle, yeni geçiş dosyaları aracılığıyla şemada değişiklik yaptıktan sonra db: migrate komutunu kullanırsınız (bu yalnızca veritabanında zaten veri varsa anlamlıdır). db: schema: load, uygulamanızın yeni bir örneğini ayarladığınızda kullanılır.

Umarım bu yardımcı olur.


Raylar için GÜNCELLEME 3.2.12:

Ben sadece kaynağı kontrol ve bağımlılıklar şimdi böyle:

  • db: create geçerli env için veritabanı oluşturur
  • db: create: all tüm ortamlar için veritabanları oluşturur
  • db: drop geçerli env için veritabanını düşürür
  • db: drop: tüm enveler için veritabanlarını düşürür
  • db: migrate , henüz çalışmayan env için taşıma çalıştırır
  • db: migrate: up belirli bir taşıma işlemini çalıştırır
  • db: migrate: down belirli bir geçişi geri alır
  • db: migrate: status geçerli taşıma durumunu gösterir
  • db: geri alma son geçişi geri alır
  • db: ileri geçerli şema sürümünü bir sonrakine ilerletir
  • db: seed (yalnızca) db / seed.rb dosyasını çalıştırır
  • db: schema: load , şemayı geçerli env'nin veritabanına yükler
  • db: schema: dump geçerli env'nin şemasını atar (ve db'yi de oluşturuyor gibi görünüyor)

  • db: kurulum çalışır db: şema: yük, db: tohum

  • db: reset çalışır db: drop db: setup
  • db: migrate: redo çalışır (db: migrate: down db: migrate: up) veya (db: rollback db: migrate) belirtilen taşıma işlemine bağlı olarak
  • db: migrate: reset çalışır db: drop db: create db: migrate

Daha fazla bilgi için lütfen https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (Rails 3.2.x için) ve https: // github'a göz atın. .com / raylar / raylar / damla / v4.0.5 / activerecord / lib / active_record / railties / databases.rake (Rails 4.0.x için)



3
@cutation: db: setup kesinlikle db: migrate komutunu çalıştırmaz, çünkü sadece bir db kurulumu için tüm geçişleri çalıştırmak için çok kırılgan olur (schema.rb bunun içindir).
moritz

2
Ben db: sıfırlama yürütüyorum ve benim db tohumlama. Neden olabilir?
Alejandro Riedel

db:db:create gerekirse kurulum da çalışır . En azından raylar itibariyle 4.0.2.
Dan

Bekleyen taşıma işlemleri varsa ancak beklemedeki taşıma işlemlerini gerçekleştirmezse rake db:migrate, Rails 4 çağrı rake db:setupyapılır.
Pooyan Khosravi

24

TLDR

kullanım

  • rake db:migrate Şemada değişiklik yapmak istiyorsanız
  • rake db:resetVeritabanını bırakmak istiyorsanız, şemayı yeniden yükleyin ve veritabanını yeniden schema.rbgönderin
  • rake db:schema:loadVeritabanını şemada belirtildiği gibi sıfırlamak istiyorsanız schema.rb(Bu, tüm verileri silecektir)

açıklamalar

rake db:schema:loadşemayı schema.rbdosyada belirtildiği şekilde kuracaktır . Bu, yeni bir uygulama yüklemesi için kullanışlıdır, çünkü bu kadar zaman almazdb:migrate

Önemli not db:schema:loadedecektir silmek sunucudaki verileri.

rake db:migratevarolan şemada değişiklik yapar. Şemanın sürümlerini oluşturmak gibi. yakut dosyaları db:migratearayacak db/migrate/ve henüz çalıştırılmamış olan taşıma işlemlerini en eskisinden başlayarak yürütecektir. Rails, geçiş dosya adının başlangıcındaki zaman damgasına bakarak hangi dosyanın en eski olduğunu bilir. db:migrateverilerin veritabanına da konabileceği bir yarar sağlar. Bu aslında iyi bir uygulama değil. rake db:seedVeri eklemek için kullanmak daha iyidir .

rake db:migrategörevleri sağlar yukarı , aşağı gibi komutları sağlayan vsrake db:rollback .

rake db:resetyapar db:dropve db:setup
veritabanını düşürür, yeniden oluşturur, şemayı yükler ve tohum verileriyle ilklendirir

Veritabanlarındaki komutların ilgili kısmı. Fren


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

Bu nedenle, üretim şemanızı db: schema: load (önceki taşıma işlemlerinden oluşan bir diziden oluşturulmuş) kullanarak oluşturursanız, hangi geçişlerin (ilk schema.rb'yi oluşturmaya katılanların) gelecekte çalıştırılması gerekmediğini bileceksiniz. db: invocations migrate?
CanadaIT

2

Anladığım kadarıyla, veritabanınızı bırakacak ve db/schema.rbdosyanıza göre yeniden oluşturacaktır . Bu nedenle schema.rbdosyanızın her zaman güncel ve sürüm kontrolü altında olduğundan emin olmanız gerekir .


0

Sadece Active Record Rake görevlerine bu dosyadaki gibi yaşadıklarına inandığım gibi bakabilirsiniz. https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb

Yaptıkları şey doğru mu?

Bu nereden geldiklerine bağlıdır ve bu sadece göreve göre değiştiklerini göstermek için bir örnektir. Burada görevlerle dolu farklı bir dosya var.

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

bu görevlere sahip.

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

Bu, sorunuza cevap vermeyebilir, ancak devam etmek ve özellikle komisyon dosyaları ve görevleri hakkında kaynağa bakmak için biraz fikir verebilir. Rayları kullanmanıza yardımcı olmak için oldukça iyi bir iş yaptıkları için, kodu her zaman bu kadar iyi belgelemezler. Ne yapması gerektiğini biliyorsak, hepimiz orada yardımcı olabiliriz.


Lütfen kaldırılması durumunda makalenin ilgili kısımlarını belirtin. Nedenini açıklamadan bir şey yapmayı önermeyin.
PhilT

0

Rails 5 için GÜNCELLENDİ:

db:create- Geçerli RAILS_ENV ortamı için veritabanı oluşturur . Eğer RAILS_ENV bunu geliştirme ve test veritabanlarına varsayılan belirtilmemiştir.

db:create:all - Tüm ortamlar için veritabanı oluşturur.

db:drop- Geçerli RAILS_ENV ortamı için veritabanını bırakır . Eğer RAILS_ENV bunu geliştirme ve test veritabanlarına varsayılan belirtilmemiştir.

db:drop:all - Tüm ortamlar için veritabanını bırakır.

db:migrate- Henüz çalıştırılmamış olan ortam için geçişleri çalıştırır. Varsayılan olarak, taşıma işlemlerini yalnızca geliştirme ortamında çalıştırır.

db:migrate:redo- Belirtilen geçişe bağlı olarak db: migrate: down ve db: migrate: up veya db: migrate: rollback ve db: migrate: up komutlarını çalıştırır.

db:migrate:up - Verilen taşıma SÜRÜMÜ için çalışır.

db:migrate:down - Verilen taşıma SÜRÜMÜ için aşağı çalışır.

db:migrate:status - Geçerli taşıma durumunu görüntüler.

db:migrate:rollback - Son geçişi geri alır.

db:version - Geçerli şema sürümünü yazdırır.

db:forward - Şemayı sonraki sürüme iter.

db:seed- db / seeds.rb dosyasını çalıştırır .

db:schema:loadVeritabanını schema.rb dosyasından yeniden oluşturur.

db:schema:dumpGeçerli ortamın şemasını db / schema.rb dosyasına döker .

db:structure:load- Veritabanını structure.sql dosyasından yeniden oluşturur.

db:structure:dump- Geçerli ortamın şemasını db / structure.sql dosyasına döker . (İle başka bir dosya belirleyebilirsiniz SCHEMA=db/my_structure.sql)

db:setupSkor db: oluşturmak , db: şema: yükü ve db: tohum .

db:resetSkor db: damla ve db: setup . db:migrate:reset- db: drop , db: create ve db: migrate komutlarını çalıştırır .

db:test:prepare- Bekleyen taşıma işlemlerini kontrol edin ve test şemasını yükleyin. (Herhangi bir argüman olmadan komisyon çalıştırırsanız, bunu varsayılan olarak yapar.)

db:test:clone - Test veritabanını geçerli ortamın veritabanı şemasından yeniden oluşturun.

db:test:clone_structure- db: test: clone'a benzer , ancak test veritabanınızın geçerli ortamınızın veritabanı ile karakter kümeleri ve harmanlamalar da dahil olmak üzere aynı yapıya sahip olmasını sağlar.

db:environment:set- ar_internal_metadata tablosunda geçerli RAILS_ENV ortamını ayarlayın . (Korunan ortam kontrolünün bir parçası olarak kullanılır.)

db:check_protected_environments- Geçerli RAILS_ENV ortamında yıkıcı bir eylemin gerçekleştirilip gerçekleştirilemeyeceğini kontrol eder . Db: drop veya db: schema: load gibi yıkıcı bir eylem çalıştırırken dahili olarak kullanılır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.