清除或重新创build一个Ruby on Rails数据库
我有一个开发Ruby on Rails数据库的完整数据。 我想删除一切,重build数据库。 我正在考虑使用类似于:
rake db:recreate
这可能吗?
我知道两种方法来做到这一点:
这将重置你的数据库,并重新加载你所有的当前模式:
rake db:reset db:migrate
这将破坏你的分贝,然后创build它,然后迁移你当前的模式:
rake db:drop db:create db:migrate
所有数据都将在两种情况下丢失。
在Rails 4上,所有需要的是
$ rake db:schema:load
这将删除数据库中的全部内容,并从schema.rb文件重新创build模式,而不必逐个应用所有迁移。
我在航站楼使用下列class轮。
rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare
我把这个作为shell别名,并命名为remigrate
更新:随着Rails 5的出现,这个命令可以通过这个命令来访问:
rails db:purge db:create db:migrate 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:create
…从头开始构build数据库从config/database.yml
,或…
rake db:schema:load
…从你的schema.rb
文件开始构build数据库。
只需发出这些步骤的顺序:删除数据库,然后重新创build它,迁移数据,如果有种子,播种数据库:
rake db:drop db:create db:migrate db:seed
由于rake
的默认环境是开发 ,万一在spectesting中看到exception,您应该重新为testing环境创builddb,如下所示:
RAILS_ENV=test rake db:drop db:create db:migrate
在大多数情况下,testing数据库在testing过程中正在播种,因此db:seed
任务操作不需要传递。 否则,你应该准备数据库:
rake db:test:prepare
要么
RAILS_ENV=test rake db:seed
另外,要使用重新创build任务,您可以在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
使用像
rake db:drop db:create db:migrate db:seed
所有在一条线。 这是因为环境不会一次又一次地重新加载。
db:drop – 将删除数据库。
db:create – 将创build数据库(主机/ db /密码将从config / database.yml中获取)
db:migrate – 将从目录(db / migration / .rb)*运行现有的迁移。
db:seed – 将从目录(db / migration / seed.rb)运行种子数据。
我通常更喜欢:
rake db:reset
一次做所有事情
干杯!
从命令行运行
rake db:migrate:reset
您可以手动执行:
rake db:drop rake db:create rake db:migrate
或者只是rake db:reset
,这将运行上述步骤,但也将运行您的db/seeds.rb
文件。
增加的细微差别在于rake db:reset
直接从你的schema.rb
文件中加载,而不是再次运行所有的迁移文件。
你的数据在所有情况下都会被吹走。
您可以使用以下命令行:
rake db:drop db:create db:migrate db:seed db:test:clone
要删除特定的数据库,您可以在rails控制台上执行此操作:
$rails console Loading development environment 1.9.3 > ActiveRecord::Migration.drop_table(:<table_name>) 1.9.3 > exit
然后再次迁移数据库
$bundle exec rake db:migrate
在导轨4.2上,删除所有数据但保留数据库
$ bin/rake db:purge && bin/rake db:schema:load
https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
您可以使用db:reset
– 运行db:drop和db:setup或db:migrate:reset
– 运行db:drop,db:create和db:migrate。
依赖于你想使用存在的schema.rb
根据Rails指南 ,应该使用这一个class轮,因为它会从schema.rb
加载,而不是逐个重新加载迁移文件:
rake db:reset
因为在开发中,你总是想重新创build数据库,所以你可以在你的lib / tasks文件夹中定义一个rake任务。
namespace :db do task :all => [:environment, :drop, :create, :migrate] do end end
在terminal你会跑
rake db:all
它会重build你的数据库
我认为运行这个命令的最好方法是:
**rake db:reset** it does db:drop, db:setup rake db:setup does db:create, db:schema:load, db:seed
我今天对我的rails模式进行了一些修改。 我意识到我需要一个层次结构中的另外两个模型,还有一些模型需要删除。 模型和控制器需要很less的改变。
我添加了两个新的模型,并创build它们,使用:
rake db:migrate
然后我编辑了schema.rb文件。 我手动删除了不再需要的旧模型,根据需要更改了外键字段,并将其重新sorting以使其更加清晰。 我删除了所有的迁移,然后通过以下方式重新运行构build:
rake db:reset
它工作完美。 当然,所有的数据都要重新加载。 Rails意识到迁移已经被删除,重新设置了高水位标记:
-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])