清除或重新创建Ruby on Rails数据库

时间:2010-11-07 01:23:01

标签: ruby-on-rails ruby-on-rails-3 rake

我有一个充满数据的开发Ruby on Rails数据库。我想删除所有内容并重建数据库。我正在考虑使用类似的东西:

rake db:recreate

这可能吗?

21 个答案:

答案 0 :(得分:1021)

我知道有两种方法可以做到这一点:

这将重置您的数据库并使用all:

重新加载当前架构
rake db:reset db:migrate

这将破坏您的数据库,然后创建它,然后迁移您当前的模式:

rake db:drop db:create db:migrate

两种情况下都会丢失所有数据。

答案 1 :(得分:150)

在Rails 4上,所有需要的是

$ rake db:schema:load

这会删除数据库上的全部内容,并从schema.rb文件重新创建架构,而不必逐个应用所有迁移。

答案 2 :(得分:42)

我在终端使用以下一个班轮。

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

我把它作为shell别名并命名为remigrate

到现在为止,您可以轻松地“链接”Rails任务:

$ 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+

答案 3 :(得分:33)

更新:在Rails 5中,可以通过以下命令访问此命令:

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


从最新的rails 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

答案 4 :(得分:28)

根据您的需要,您可以使用...

rake db:create

...从头开始构建数据库config/database.yml或......

rake db:schema:load

...从您的schema.rb文件开始构建数据库。

答案 5 :(得分:11)

只需发布步骤顺序:删除数据库,然后重新创建数据库,迁移数据,如果有种子,则播种数据库:

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

由于rake的默认环境是 development ,如果您在spec测试中看到异常,则应该为 test 重新创建db环境如下:

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

答案 6 :(得分:11)

使用

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

全部在一行。这更快,因为环境不会一次又一次地重新加载。

db:drop - 将删除数据库。

db:create - 将创建数据库(主机/数据库/密码将从config / database.yml获取)

db:migrate - 将从目录(db / migration / .rb)*运行现有迁移。

db:seed - 将从目录(db / migration / seed.rb)运行种子数据 ..

我通常更喜欢:

rake db:reset

一次完成所有工作。

干杯!

答案 7 :(得分:11)

从命令行运行

rake db:migrate:reset

答案 8 :(得分:8)

您可以手动执行:

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

或仅rake db:reset,它将运行上述步骤,但也会运行您的db/seeds.rb文件。

另一个细微差别是,rake db:reset直接从schema.rb文件加载,而不是再次运行所有迁移文件。

在所有情况下,您的数据都会被吹走。

答案 9 :(得分:6)

您可以使用以下命令行:

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

答案 10 :(得分:4)

要删除特定数据库,可以在rails console上执行此操作:

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

然后再次迁移数据库

$bundle exec rake db:migrate 

答案 11 :(得分:4)

在rails 4.2上,删除所有数据但保留数据库

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

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

答案 12 :(得分:3)

你可以使用 db:reset - 用于运行db:drop和db:setup或 db:migrate:reset - 运行db:drop,db:create和db:migrate。

依赖于你想要使用exists schema.rb

答案 13 :(得分:2)

根据Rails guide,应使用此一个班轮,因为它将从schema.rb加载,而不是逐个重新加载迁移文件:

rake db:reset

答案 14 :(得分:1)

因为在开发过程中,您总是希望重新创建数据库,您可以在lib / tasks文件夹中定义rake任务。

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

并在终端中运行

rake db:all

它将重建您的数据库

答案 15 :(得分:1)

我认为运行此命令的最佳方法是:

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

答案 16 :(得分:1)

只需运行

rake db:setup

如果使用某些数据创建种子文件,它将删除数据库,创建新数据库并从种子中填充db。

答案 17 :(得分: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

注释:

  • 如果使用schema:load,则比进行所有迁移都快,但结果相同。
  • 所有数据将丢失。
  • 您可以在一行中运行多个耙。
  • 使用滑轨3。

答案 18 :(得分:0)

我今天对我的rails架构做了很多改动。我意识到我需要在层次结构中另外添加两个模型,而另一些模型则需要删除。模型和控制器需要进行许多微小的更改。

我添加了两个新模型并使用以下方法创建了它们:

rake db:migrate

然后我编辑了schema.rb文件。我手动删除了不再需要的旧模型,根据需要更改了外键字段,只是重新排序了一下,让我更清楚。我 已删除 所有迁移,然后通过以下方式重新运行构建:

rake db:reset

完美无缺。当然,所有数据都必须重新加载。 Rails意识到迁移已被删除并重置了高水位标记:

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

答案 19 :(得分:0)

在Rails 6中,有一种方便的方法可以重置数据库并再次种植种子:

rails db:seed:replant # Truncates tables of each database for current environment and loads the seeds

https://weblog.rubyonrails.org/2019/3/15/this-week-in-rails-security-fixes-bulk-insert-and-upsert-seeds-replanting/

答案 20 :(得分:0)

我使用:

  • .addE('HAS').from('parent') 删除数据库。
  • rails db:drop 基于 rails db:create
  • 创建数据库

前面的命令可以用 config/database.yml 代替。

不要忘记运行 rails db:reset 来运行迁移。