686

との違いは、私にはかなり明確ですrake db:migraterake db:reset私が理解していないrake db:schema:loadのは、前の 2 つとどう違うのかということです。

私が同じページにいることを確認するために:

  • rake db:migrate- まだ実行されていない移行を実行します。
  • rake db:reset- データベースをクリアし (おそらくrake db:drop++を実行)、新しいデータベースで移行を実行しますrake db:createrake db:migrate
4

6 に答える 6

1439
  • db:migrateは、まだ実行されていない (単一の) 移行を実行します。

  • db:createはデータベースを作成します

  • db:dropはデータベースを削除します

  • db:schema:loadは、schema.rb に従って、既存のデータベース内にテーブルと列を作成します。これにより、既存のデータが削除されます。

  • db:setupは db:create、db:schema:load、db:seed を実行します

  • db:resetは db:drop、db:setup を行います

  • db:migrate:resetは db:drop、db:create、db:migrate を行います

通常、新しい移行ファイルを介してスキーマに変更を加えた後に db:migrate を使用します (これは、データベースに既にデータがある場合にのみ意味があります)。db:schema:load は、アプリの新しいインスタンスをセットアップするときに使用されます。

それが役立つことを願っています。


レール 3.2.12 の更新:

ソースを確認したところ、依存関係は次のようになりました。

  • db:createは、現在の環境のデータベースを作成します

  • db:create:allは、すべての環境のデータベースを作成します

  • db:dropは、現在の環境のデータベースを削除します

  • db:drop:allは、すべての環境のデータベースを削除します

  • db:migrateは、まだ実行されていない現在の環境の移行を実行します

  • db:migrate:upは、1 つの特定の移行を実行します

  • db:migrate:down は、 1 つの特定の移行をロールバックします

  • db:migrate:statusは現在の移行ステータスを示します

  • db:rollbackは最後の移行をロールバックします

  • db:forwardは、現在のスキーマ バージョンを次のバージョンに進めます。

  • db:seed (のみ) db/seed.rb ファイルを実行します

  • db:schema:loadはスキーマを現在の環境のデータベースにロードします

  • db:schema:dumpは、現在の環境のスキーマをダンプします (また、db も作成するようです)

  • db:setup実行 db:create db:schema:load db:seed

  • db:reset実行 db:drop db:setup

  • db:migrate:redoは、指定された移行に応じて (db:migrate:down db:migrate:up) または (db:rollback db:migrate) を実行します

  • db:migrate:reset run db:drop db:create db:migrate

詳細については、 https: //github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (Rails 3.2.x の場合) およびhttps://githubをご覧ください。 .com/rails/rails/blob/v4.0.5/activerecord/lib/active_record/railties/databases.rake (Rails 4.0.x 用)

于 2012-04-24T16:48:46.120 に答える
26

TLDR

使用する

  • rake db:migrateスキーマを変更したい場合
  • rake db:resetデータベースをドロップしたい場合は、 からスキーマをリロードし、データベースschema.rbを再シードします。
  • rake db:schema:loadで提供されているスキーマにデータベースをリセットする場合schema.rb(これにより、すべてのデータが削除されます)

説明

rake db:schema:loadファイルで提供されているスキーマを設定しschema.rbます。これは、それほど時間がかからないため、アプリの新規インストールに役立ちます。db:migrate

重要な注意事項、サーバー上のデータdb:schema:load削除します。

rake db:migrate既存のスキーマに変更を加えます。スキーマのバージョンを作成するようなものです。db:migrateruby ファイルを検索しdb/migrate/、まだ実行されていない移行を最も古いものから実行します。Rails は、移行ファイル名の先頭にあるタイムスタンプを見て、どのファイルが最も古いかを認識します。db:migrateデータベースにもデータを入れられるというメリットがあります。これは実際には良い習慣ではありません。rake db:seedデータを追加するために使用することをお勧めします。

rake db:migrateupdownなどのタスクを提供し、次のようなコマンドを有効rake db:rollbackにし、最も便利なコマンドにします。

rake db:resetdb:dropデータベースをdb:setup
削除し、再度作成し、スキーマをロードして、シード データで初期化します。

database.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
于 2016-04-07T07:12:54.807 に答える
9

レール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:downおよびdb:migrate:upまたはdb:migrate:rollbackおよびdb:migrate:upを実行します。

db:migrate:up- 指定された移行 VERSION を実行します。

db:migrate:down- 指定された移行 VERSION のダウンを実行します。

db:migrate:status- 現在の移行ステータスを表示します。

db:migrate:rollback- 最後の移行をロールバックします。

db:version- 現在のスキーマ バージョンを出力します。

db:forward- スキーマを次のバージョンにプッシュします。

db:seed- db/seeds.rbファイルを実行します。

db:schema:loadschema.rbファイルからデータベースを再作成します。既存のデータを削除します。

db:schema:dump現在の環境のスキーマをdb/schema.rbにダンプします。

db:structure:load- structure.sqlファイルからデータベースを再作成します。

db:structure:dump- 現在の環境のスキーマをdb/structure.sqlにダンプします。( で別のファイルを指定できますSCHEMA=db/my_structure.sql)

db:setupdb:createdb:schema:load、およびdb:seedを実行します。

db:resetdb:dropおよびdb:setupを実行します。 db:migrate:reset- db:dropdb:create、およびdb:migrateを実行します。

db:test:prepare- 保留中の移行を確認し、テスト スキーマをロードします。(引数なしで rake を実行すると、デフォルトでこれが実行されます。)

db:test:clone- 現在の環境のデータベース スキーマからテスト データベースを再作成します。

db:test:clone_structure- db:test:cloneと似ていますが、テスト データベースが現在の環境のデータベースと同じ構造 (文字セットと照合順序を含む) を持っていることを確認します。

db:environment:set- 現在のRAILS_ENV環境をar_internal_metadataテーブルに設定します。(保護環境チェックの一部として使用されます。)

db:check_protected_environments- 現在のRAILS_ENV環境で破壊的なアクションを実行できるかどうかを確認します。db:dropdb:schema:loadなどの破壊的なアクションを実行するときに内部的に使用されます。

于 2020-05-04T08:05:06.200 に答える
2

私の知る限り、データベースを削除し、db/schema.rbファイルに基づいて再作成します。schema.rbそのため、ファイルが常に最新でバージョン管理されていることを確認する必要があります。

于 2012-04-24T16:25:21.947 に答える
0

このファイルにあるように、Active Record Rake タスクがそこにあると私が信じているので、単純に Active Record Rake タスクを調べることができます。 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

これはあなたの質問に答えないかもしれませんが、先に進み、特に rake ファイルとタスクについてソースを調べるための洞察を与えることができます。彼らはレールの使用を支援するという点で非常に優れているため、常にコードを適切に文書化しているわけではありません。それが何をすべきかを知っていれば、私たちは皆そこで助けることができます.

于 2015-02-07T18:20:18.730 に答える