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

rake db:recreate

这可能吗?


当前回答

使用像

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

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

drop -删除数据库。

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

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

Db:seed -将在目录(Db /migration/seed.rb)中运行种子数据。

我通常喜欢:

rake db:reset

一下子做所有的事。

干杯!

其他回答

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比执行所有迁移都快,但结果相同。 所有数据都将丢失。 您可以在一行中运行多个耙。 使用rails 3。

使用像

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

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

drop -删除数据库。

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

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

Db:seed -将在目录(Db /migration/seed.rb)中运行种子数据。

我通常喜欢:

rake db:reset

一下子做所有的事。

干杯!

在Rails 6中,有一种方便的方法来重置DB并再次播种:

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/

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

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

在终端中运行

rake db:all

它将重新构建数据库

要删除一个特定的数据库,你可以在rails控制台中这样做:

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

然后再次迁移DB

$bundle exec rake db:migrate