我有一个充满数据的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

一下子做所有的事。

干杯!

其他回答

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

rails db:清除db:创建db:迁移RAILS_ENV=test


在最新的rails 4.2版本中,你现在可以运行:

rake db:purge 

来源:提交

# 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

我知道两种方法:

这将重置你的数据库并重新加载你当前的模式:

rake db:reset db:migrate

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

rake db:drop db:create db:migrate

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

我使用:

删除数据库。 Rails db:create根据config/database.yml创建数据库

以上命令可能替换为rails db:reset。

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

要删除一个特定的数据库,你可以在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 

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

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

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

RAILS_ENV=test rake db:drop db:create db:migrate

在大多数情况下,测试数据库在测试过程中被播种,因此db:seed任务操作不需要通过。否则,你必须准备数据库:

rake db:test:prepare

or

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