首页 文章

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

提问于
浏览
534

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

rake db:recreate

这可能吗?

18 回答

  • 1

    要删除特定数据库,可以在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
    
  • 31

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

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

    由于 rake 的默认环境是开发,如果您在规范测试中看到异常,则应该为测试环境重新创建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
    
  • 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
    

    一次做所有事 .

    干杯!

  • 1

    更新:随着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
    
  • 6

    只需你可以跑

    rake db:setup

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

  • 995

    在Rails 4上,所有需要的都是

    $ rake db:schema:load
    

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

  • 8

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

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

    rake db:migrate
    

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

    rake db:reset
    

    它工作得很好 . 当然,所有数据都必须重新加载 . Rails意识到迁移已被删除并重置高水位标记:

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

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

    这将重置您的数据库并使用all重新加载当前架构:

    rake db:reset db:migrate
    

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

    rake db:drop db:create db:migrate
    

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

  • 11

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

    rake db:reset
    
  • 4

    从命令行运行

    rake db:migrate:reset
    
  • 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

  • 147

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

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

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

    rake db:create

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

    rake db:schema:load

    ...从头开始从 schema.rb 文件构建数据库 .

  • 3

    您可以使用 db:reset - 用于运行db:drop和db:setup或 db:migrate:reset - 它运行db:drop,db:create和db:migrate .

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

  • 2

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

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

    在终端你会跑

    rake db:all
    

    它将重建您的数据库

  • 39

    您可以使用以下命令行:

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

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

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

    你可以手动做:

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

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

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

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

相关问题